- 博客(2954)
- 资源 (44)
- 收藏
- 关注
原创 (25)Blender源码分析之顶层菜单Blender菜单
显示是符合上面的函数调用规范,因此必然进入上面的函数,但是我们会感觉得比较奇怪的是函数的参数wm.splash_about,如果你直接拿这个参数去代码里查找,是找不到这个关联的菜单对象。当运行python代码时,通过layout对象查找operator函数,就会遍历上面的RNA对象,然后就会调用UILayout_operator_call函数,这样就可以找到操作对象内容。前面分析顶层BAR菜单的显示,已经它是由TOPBAR_HT_upper_bar类来构造出来的,接着它会由一些项来构成子菜单。...
2022-07-25 22:46:29 945
原创 (24)Blender源码分析之顶层菜单显示代码分析
在draw_left(self,context)函数里,先要获取当前布局对象layout、当前窗口对象window、当前的屏幕对象screen,然后就调用类TOPBAR_MT_editor_menus来显示编辑菜单,然后增加一个分隔条,最后才判断是否全屏显示,如果全屏显示就会多一个返回菜单,否则就显示工作区菜单。当在python代码里定义为TOPBAR时,在运行python代码那时,就会通过上面的数组找到对应的类型,这样就转换为内部类型的识别了,就可以区分这个类到底是顶层菜单条,还是状态条等等。...
2022-07-24 21:32:18 956
原创 (23)Blender源码分析之python里的基类Header分析
不过要理解菜单的显示,就需要理解python里的基类Header,因为其它菜单都是继承这个基类,这样就可以使用这个基类的属性。所以在python里顶部的BAR、菜单、面板都是采用这种方法来派生出来,然后分析类的基类时,就可以找到对应的结构,再通过结构里的指定的函数进行对应的操作。通过TOPBAR_HT_upper_bar类来定义顶部的菜单条,但是它是继承基类Header,而这个基类Header又是什么呢,为什么需要继承它?那么这个菜单的代码又是在哪里定义的呢?...
2022-07-22 18:45:00 581
原创 (22)Blender源码分析之鼠标按下消息到窗口调用过程
通过上面的分析,我们明白了在UI创建时先要关联消息处理的函数,当用户按下鼠标按键,就会触发一个消息到系统里,接着系统就会发送给Windows窗口,blender从Windows窗口再拿到消息,然后再次转发送到自己的界面窗口,最后通过遍历自己的窗口消息队列实现消息处理。这时调用函数ghost_event_proc来处理,它会找到这个事件的窗口,然后再把这个消息添加到窗口消息队列,等待后面再进行处理。这个函数wm_block_close就会比较熟悉了,它是闪屏里设置当点击窗口的图片时调用的函数。...
2022-07-17 23:12:49 592 2
原创 (21)Blender源码分析之鼠标按下消息添加到队列的过程
前面分析闪屏窗口显示,从图片的加载到菜单的布局显示,从C代码到python代码的相互调用,再到整个闪屏的UI布局显示。接着下来我们来分析一下鼠标按下的事件处理流程,这样才能明白blender处理Windows消息的过程,才可以明白它的事件处理过程,才可以进一步地添加事件处理。如果熟悉Windows编程,就会对整个事件处理比较熟悉,如下图所示:这个过程已经十几年都没有变化过,这是Windows的消息机制,因此blender在Windows下运行,也省不了这个处理流程。这个过程在前面的文章也有简单地介绍过,在这
2022-07-14 00:30:14 519
原创 (20)Blender源码分析之闪屏窗口的菜单python代码draw的属性和函数对应
在前面我们可以看到闪屏的图片,现在来分析一下图片中菜单的python代码属性、函数与C代码的结构、函数的对应关系,通过这个关系,我们就可以理解python修改的内容,也就是相当于修改C代码里的内容,这样才能明白python和C代码相互合作完成同一件事情,另外通过一层关系,也可以快速地定位代码的功能,可以为增加功能、修改BUG提供一个坚实的基础。layout.operator_context C代码里对应位置代码:文件是rna_ui_gen.c,结构定义是rna_UILayout_operator_con
2022-07-08 19:15:00 398
原创 (19)Blender源码分析之闪屏窗口的菜单python代码draw函数运行过程
在前面我们可以看到闪屏的图片, 很明显看到菜单分成两列布局,如下图所示:在这里我们需要搞懂blender是怎么样能够把菜单控制两列分布,又是通过什么样的方式来与C代码进行沟通的。我们来查看WM_MT_splash类的python代码,会发draw函数的第一行代码是这样:layout = self.layout主要获取布局对象layout,那么这个布局对象又是从什么方来,会让python代码使用的呢?一般情况有两种来源,一种是python代码里定义的,另外一种是在C的python API里定义的。在这里访问的
2022-07-07 20:30:00 649
原创 (18)Blender源码分析之闪屏窗口的菜单python代码属性识别
在前面我们可以看到闪屏的图片,在后面是显示了菜单,因此分析了菜单注册、菜单显示过程,在最后也提到怎么样运行python的代码,但是没有详细地分析菜单的python代码运行过程,在本文里就来解决这个问题,主要就是理解python定义菜单的代码是怎么样运行的,它的类属性又是怎么样获取到,以及它的draw函数调用的对象又是从哪里过来的呢。这一系列的问题解决,才能搞明白python定义菜单的代码,才可以修改这些python代码,从而可以修改blender的菜单内容显示和操作。第一步,我们看到python定义闪屏的代
2022-07-06 18:30:00 530 1
原创 (17)Blender源码分析之闪屏窗口的菜单显示过程
在前面我们可以看到闪屏的图片,也分析了闪屏里显示的菜单来源,但是还没有把整个菜单显示的过程搞清楚。比如说在blender里是怎么调用python的类代码运行呢?在这里闪屏菜单的python的类代码如下:那么你会问这些代码是怎么样运行,又是怎么改变菜单项的布局,又是怎么样区分不同地方显示?在前面也已经分析过,通过import时候会注册python类到一个全局的HASH表,当显示菜单时再从这个HASH表里找出来。注册时候只是把python类代码进行收集和编译,并不会真正地执行,只有当调用python类里的函数运
2022-07-05 18:15:00 518
原创 (16)Blender源码分析之闪屏窗口的菜单从python加载过程
在前面我们可以看到闪屏的图片,已经分析了闪屏下半部的菜单显示,它显示的菜单资源是来自python代码,采用这种方式来实现,就可以不修改C代码,就可以修改菜单的组成。要实现这样的功能,是一个复杂的过程,如果你想把这个功能集成到你的软件里,就需要看看本文,可以参考blender是怎么样实现的。当然,本文只是一个引子,介绍了大体的研究方向,如需要深入地研究,还得自己去研究blender的源码,才能偷一些blender代码到自己的工程里,这样的开发方式肯定快不少,至少比自己没有方向地研究要快上一大捷,毕竟开源这位“
2022-06-28 20:00:00 658 1
原创 (15)Blender源码分析之闪屏窗口显示菜单功能
在前面我们可以看到闪屏的图片,可以看到有下面的菜单在图片后面,如下图:后面这些菜单又是怎么样显示出来的呢,本文就来探索这个方面的问题,由于blender是一套复杂灵活的软件,所以它的菜单系统也是比较复杂的。要想显示一个菜单,需要理解C的代码,也需要理解python的代码,需要两方面的代码相互配合才能显示正确的菜单。如果一开始对这套代码不太熟悉,就会比较麻烦了,很多功能无从谈起。因此,现在就来分析红色框里的菜单,看看这些菜单又是怎么一个过程来显示出来的,当你理解这个过程之后,才可以修改这些菜单的功能,才能定制
2022-06-25 09:02:09 556 1
原创 (14)Blender源码分析之闪屏窗口显示软件版本号
在前面我们可以看到闪屏的图片, 如果你仔细地查看,就会发现右上角上显示有一个版本字符串,如下图所示:很多软件都会有这个版本号,因为一个软件是不断地更新,不断地升级,不断地迭代的过程,所以需要一个特别的标记来查看这个软件的基本功能,是否已经解决了BUG。版本号就是一个很好的方式,到目前为止,还没有别的方法比它更靠谱,因为它是不断地自动递增,并且很好地表示软件发布的顺序,同时也表示了软件是否还在测试过程中。这样就让使用软件的用户来根据自己的实际需求来使用不同的版本,比如有一些想使用新功能的用户,就可能下载最新的
2022-06-09 13:30:00 516
原创 (13)Blender源码分析之闪屏窗口关闭的事件响应
在前面我们可以看到闪屏的图片, 这个图片的创建过程已经分析过,也明白它是怎么得到的,但是我们还需要知道这个闪屏窗口怎么样来关闭的,因为需要释放一些资源,也需要提供一个退出窗口的方式。在本文里,就来关注一下它是怎么来设置一个窗口关闭处理的。可以这个函数wm_block_create_splash里,看到下面这行代码:UI_but_func_set(but, wm_block_close, block, NULL);当我们点击闪屏窗口的空白地方,就会触发这个窗口事件,从而对整个闪屏窗口进行关闭的动作。因此,先来
2022-06-02 19:30:00 512
原创 使用C++库boost的log功能时 error LNK2019: 无法解析的外部符号 “public: static void __cdecl boost::log::v2s_mt_nt6出错
当你使用高版本C++库boost来编译时,如果使用log功能,可能会出现这样的问题,如下图:这时候提示为:error LNK2019: 无法解析的外部符号 "public: static void __cdecl boost::log::v2s_mt_nt6::record_view::public_data::destroy一开始我遇到这个问题,也是百思不得其解,又是度娘,又是科学上网找东西,但是还没有解决。后来深入地看了boost log的介绍,下面的网站:Chapter1...
2022-05-10 13:15:00 1675
原创 C++17开始取消std::codecvt_utf8支持
由于C++17之后取消std::codecvt_utf8的支持,所以UTF8与UNICODE之间进行转换,就需要使用别的方法了。否则代码是编译不过,这时又需要回到WINDOWS底层的API来调用转换了。需要使用MultiByteToWideChar函数来实现,下面就是实现UTF8到UNICODE之间转换:const std::wstring CCaiStep::Utf8ToWString(const std::string utf8){ //std::wstring_convert<std:
2022-05-10 13:00:00 3367 1
原创 (12)Blender源码分析之加载图片的uiDefButImage过程
在前面我们可以看到闪屏的图片,这个图片是通过函数wm_block_splash_image来加载进来的,然后图片就在数据结构ImBuf,这个数据结构保存了图像相关的属性和显示的内容。刚刚有这个图片的数据,还不能在界面上显示出来,因为图片在界面上没有办法进行布局,如果是多张图片,就会重叠在一起,所以需要把图片放入按钮的数据结构里面,这样提供了布局的功能。下面这行代码,就是解决图片放入到按钮的过程,最后得到uiBut对象, uiBut *but = uiDefButImage( bloc...
2022-05-05 18:30:00 513 1
原创 在树莓派里使用C++库boost
由于C++的高性能,在嵌入式或者树莓派这样的系统,采用这样的语言是非常合适的,这样可以在CPU性能不太高的场合,写出处理大量数据和功能的软件,并且运行速度飞快,这样既节省产品成本,又为社会节能作出贡献,因为可以大量节省CPU运算,就可以省电,就可以少浪费化石能源。而对于linux这样的系统,采用boost库就更加方便了,因为很多功能已经进行封装,使用起来更加方便,不容易出错。那么本文,就来介绍一下怎么样简单地使用boost。先要安装boost,可以采用源码安装,也可以使用编译库的方式来安装。采用源码
2022-04-25 09:23:34 1198 2
原创 让树莓派支持C++17开发
时间不断地流逝,到目前已经是2022年了,离2017年已经过去5年了。因此开发语言也与时俱进,慢慢转换到C++17的版本上来了。要想在树莓派里使用更高的版本,需要安装g++10.1版本。GCC支持C++版本如下:下面就来进行这个过程:更新最新的系统$ sudo apt update && sudo apt upgrade -y从库里下载二进制版本$ git clone https://bitbucket.org/sol_prog/raspberry-pi-gcc-.
2022-04-24 12:02:51 1368 1
原创 树莓派上安装protobuf 3.18.2版本
树莓派上安装protobuf 3.18.2版本从网站上下载源码:https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.18.2.tar.gz解压到目录:protobuf-3.18.2然后更新软件:sudo apt-get install autoconf automakers lib tool curl make g++ unzipcd protobuf-3.18.2/sudo ./autogen.s.
2022-04-22 19:15:00 1035 1
原创 (11)Blender源码分析之加载图片的imb_loadpng过程
在前面我们可以看到闪屏的图片,但是还有一个大疑问在这里面,那么就是怎么样把文件图片里的格式数据变换成程序可以显示的内存数据,并且保存在数据结构ImBuf什么位置,以便后面读取显示代码时,知道显示的数据来源。简单地说,要实现界面显示,就是把图片当作背景显示,然后在图片之上再添加文本显示,即可以完成。在分析过程之前,我们先把保存图片数据结构看一下,了解数据加载解压之后保存的位置,这样就更加清晰这个过程了。加载解压之后的数据保存在下面的成员: /* pixels */ /** Image pixe..
2022-04-08 18:30:00 603
原创 (10)Blender源码分析之加载图片的IMB_ibImageFromMemory过程
在前面我们可以看到闪屏的图片,在那里也看到了怎么样加载闪屏图片和显示的过程,但是没有分析从内存里的图片数据怎么样转换为将要使用显示的数据,也就是说仅仅把文件的数据读取到内存,还是不能放到显示内存进行显示的,还需要对文件的类型进行解码,然后才能重构图片的位图出来,才可以把它显示出来。在本文里就来分析这部分的代码,由于闪屏的图片类型是PNG类型,在这里就以这个为例子进行分析。ImBuf *IMB_ibImageFromMemory(const unsigned char *mem,...
2022-03-24 22:00:00 1382 1
原创 (9)Blender源码分析之加载闪屏图片的wm_block_splash_image过程
在前面我们可以看到闪屏的图片,如下图所示:这一个png的图片,blender会从内存里加载这个图片,因为blender在编译时,已经把这个图片生成数据文件,变成一个C语言的数组,然后就编译到EXE文件里面,所以读取图片时,只需要从内存数组读取即可。图片文件名称叫做:splash.png,它在目录:blender\release\datafiles通过配置程序的编译工具,就可以生成下面的文件:splash.png.c这个文件在目录:build_windows_Full_x64_vc16
2022-03-10 18:30:00 501 1
原创 (8)Blender源码分析之创建区域对象UI_block_begin函数
(8)Blender源码分析之创建区域对象UI_block_begin函数在Blender的闪屏里,前面初步分析了uiBlock数据结构,但是还有很多成员并没有说明,因此需要继续对这个结构的成员进行介绍。接着下来通过UI_block_begin函数的分析来了解块区域的创建,才能明白一个弹出式的子窗口是怎么样构造,怎么样实现显示出来的,同时也明白一个OpenGL的UI是需要什么样的基本内容。uiBlock *UI_block_begin(const bContext *C, ARegion *
2022-02-25 18:30:00 722
原创 (7)Blender源码分析之创建区域对象
在Blender的闪屏里,为了弹出一个子窗口,需要调用下面的函数来创建一个子窗口的区域:uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut *but,...
2022-02-24 13:15:00 733 1
原创 (6)Blender源码分析之屏幕和区域对象结构
在Blender的设计里,UI是采用单一系统窗口的设计,比如在Windows系统里,只需要创建一个窗口,然后所有的绘制和子窗口都是自己在这个窗口里实现,并且不再使用系统的UI功能,全部是自己通过OpenGL实现。所以在Blender每一个系统窗口采用一个屏幕对象结构--bScreen数据结构来描述,然后在屏幕里再分割子窗口--screen area。因此我们先要来学习bScreen数据结构,才能明白UI是怎么样实现屏幕级别的层次。typedef struct bScreen { ID id;.
2022-02-22 11:13:41 1539
原创 (5)Blender源码分析之上下文的索引结构
(5)Blender源码分析之上下文的索引结构在前面闪屏的显示里,可以看到一个界面的基本组成,包含字体、图片、文本和菜单等等。由于所有屏幕显示的内容都是通过OpenGL来实现,意味着没有现成的GUI系统可以使用了,像大家常用的Windows的GUI是没办法使用的,因为它只使用这个窗口来绑定OpenGL的窗口,所有文本的显示都需要自己从字体里抽取出矢量图片,然后再把每一个字符的图片进行排版显示,所以整个GUI系统是比较复杂的,也会有比较多的细节内容。这里相当于自己实现了一套GUI显示系统,为什么要这样
2022-02-18 20:45:00 1054
原创 (4)Blender源码分析之闪屏窗口显示流程
(4)Blender源码分析之闪屏窗口显示流程Blender的UI系统是一个很复杂的系统,要一下子了解整个系统是不可能的,必须一步一步地解决理解整个系统,为了简单,先从Blender显示的闪屏界面开始,这样就可以把可视化的界面进行了解,快速地理解blender是怎么样去设计一个弹出式窗口,怎么运行一个弹出式的窗口。本文要分析的闪屏界面窗口如下:虽然是一个简单的界面,在这里包含了图片显示,文本标签显示,窗口菜单显示等等内容。一、Blender GUI主要有下面几部分组成:1)GHO
2022-02-15 18:15:00 1336
原创 歌曲从DTS转换为MP3的方法
歌曲从DTS转换为MP3的方法在这里主要使用以下软件:foobar2000_v1.6.10.exe 这个可以从下面网站下载:foobar2000: Downloadinglame4.0: lame4.0a14.ziphttps://newsoftdown01.rbread05.cn/down/2021down/12/20/lame4.0a14.zip?timestamp=620b4d73&auth_key=0bf7dbbf67a93690389289229240204e.
2022-02-15 17:58:20 3048
原创 (3)Blender源码分析之OpenGL函数初步
(3)Blender源码分析之OpenGL函数初步ChoosePixelFormat函数:像素格式——PIXELFORMATDESCRIPT、设备上下文、渲染上下文 在OpenGL对窗口进行渲染之前,必须根据渲染需要对窗口进行配置。 需要硬件渲染还是软件渲染? 渲染使用但缓冲还是双缓冲模式? 是否需要深度缓冲区? 是否需要模板、目标Alpha或累计缓冲区? 当为窗口设置这些参数之后,就无法对它们进行修改。为了从一个只有深度缓冲区和颜色缓...
2022-02-08 18:30:00 1235
原创 (2)Blender源码分析之OpenGL基本例子
(2)Blender源码分析之OpenGL基本例子在这个例子里,需要使用两个库,一个库是glew,一个库是glfw。glew库主要用来使用扩展的功能,它的详细说明:GLEW跨平台C++扩展库基于OpenGL图形接口使用OpenGL朋友都知道window目前支持OpenGL1.1函数 OpenGL现都发展2.0要使用些OpenGL高级特性必须载新扩展另外同显卡公司发布些自家显卡才支 持扩展函数要想用数涵数寻找新glext.h,GLEW扩展库再用找函数接口烦恼GLEW能自识 别平台所支持全部
2022-02-07 21:00:00 1456
原创 (76)C#里怎么样选择各种通用类型容器
(76)C#里怎么样选择各种通用类型容器在C#里开发,经常会碰到选择通用类型容器的问题,那么怎么样才能选择一个性能好,又满足各种情况的容器呢,这是一个费脑的问题,因此需要对这个做一些功课,才能有效地使用各种条件下的容器,才能把各个情况处理好,把代码写到恰到好处。比如在单线程的程序里就不需要考虑线程安全的问题了,又或者数据量确认只有几百个就不需要考虑性能的问题了。容器大体选择的标准如下:1、 保存键值对,并且通过键查询,通用容器选择:Dictionary<TKey,TValue&
2022-01-29 18:15:00 871
原创 (1)Blender源码分析之Windows窗口建立流程
(1)Blender源码分析之Windows窗口建立流程在多年以前,普经学习过使用Blender来创建动画,虽然是很简单的动画,但是感觉它还好伟大的,使用很简单,只要拖拉几下,就可以搞定一个动画了。这个软件是一个神奇的存在,就像神一样,一直吸引着我,让我一直想去破解这个谜;也像一个绝色佳人,让人永远向往。不过要一睹这位佳人,不是这么简单的,因为需要穿越高高的山峰,走过漫长时间旅程,又要接受大脑磨炼,同时要忍受住身体长胖的危险。如果你对Blender还是有点不了解,可以看看我以前写的文章,只要
2022-01-29 17:28:27 4319 1
原创 (75)C#里为什么需要通用类型容器
(75)C#里为什么需要通用类型容器在C#里开发,经常会遇到通道类型的容器,比如List<T>类型,这里的T可以是任何类型。但是很多人不知道为什么需要使用通用类型,因为在这之前都可以使用ArrayList类型来保存任何类型的对象。其实这的一切都是为了速度,因为ArrayList保存类型时,都需要把任何类型转换为Object类型,这时就需要对每一个元素进行装箱和拆箱的操作,导致很多无效的代码。为了解决这种问题,就需要引入通用类型的容器,这样就不需要进行装箱和拆箱的操作,代码的效率显然就会提
2022-01-28 18:15:00 785
原创 (74)C#里怎么样调用WIN API的函数时实现回调函数
(74)C#里怎么样调用WIN API的函数时实现回调函数在C#里开发,当你调用WIN API函数或者自己定义的C++库时,需要给调用的函数设置一个回调函数,这时候又需要怎么样来实现呢?在C#里显然使用委托函数来实现回调函数比较简单。比如像下面的C++函数:BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)这里第一个参数lpEnumFunc就是一个回调函数。在这里使用下面的代码来声明一个回调函数:public
2022-01-28 13:15:00 448
原创 Administer FileZilla Server安装之后,不能访问的原因
Administer FileZilla Server安装之后,它会自动启动,然后就可以添加用户,但是还是不能访问,刚开始找了一遍都没有找到原因,原来是WIN10带有防火墙,所以需要把这个服务程序添加进防火墙。打开下面的安全中心:选中允许应用通过防火墙。通过允许其它应用就可以添加,比如安装目录如下:把这个程序添加进去。就可以通过别的电脑来访问这个FTP服务器了。...
2022-01-27 09:05:58 2357
原创 (73)C#里怎么样调用WIN API的函数时传送结构或指针对象
(73)C#里怎么样调用WIN API的函数时传送结构或指针对象在C#里开发,当调用WINAPI函数时,需要向函数传送一个结构体作为参数,这时候又需要怎么样来处理呢,这种结构体又需要怎么样定义,是否可以使用类来代替呢?面对这些问题,如果是新手,就是触手无策。到处去寻找方案,往往也是一无所获。因此,开发人员需要在平时去练习解决这样的问题,而不是等到使用时候再去了解,这样就可以快速地解决自己开发的问题。第一步先要定义结构: [StructLayout(LayoutKind.Sequen...
2022-01-26 18:30:00 906
原创 (72)C#里怎么样调用WIN API的函数
(72)C#里怎么样调用WIN API的函数在C#里开发,如果经常在Windows平台开发,就避免不了使用WINAPI函数,因为这是Windows系统的基础。不过在WINAPI函数里,又存在两个版本,一个版本是ANSI单字节的版本,一个版本是双字节UNICODE的版本。如果想指定调用那个版本的函数,又是怎么样实现的呢,本文将来解决这个问题,一般情况可以看有两个版本的函数如下:MessageBoxA 这个是单字节版本。MessageBoxW 这个是双字节版本。要想在C#里选择...
2022-01-26 18:15:00 673
原创 (71)C#里怎么样调用C++动态连接库的代码
(71)C#里怎么样调用C++动态连接库的代码在C#里开发,有时候对某些算法要求比较高,这时就需要使用C++来开发,然后再在C#里调用C++开发的动态连接库。因此需要掌握怎么样从C#里调用C++动态连接库的代码。在C#里调用系统的API也是这种调用的方式,如果想调用一些系统函数也可以采用这种方式。需要使用下面的函数:DllImportAttribute(String) 命名空间:System.Runtime.InteropServices程序集:mscorlib.dll
2022-01-25 22:00:00 699 1
原创 (70)C#里怎么样在注册表里创建子键和获取键值
(70)C#里怎么样在注册表里创建子键和获取键值在C#里开发,经常会遇到注册表的操作。Windows注册表(Registry)实质上是一个庞大的数据库,它存储着下面这些内容:用户计算机软、硬件的有关配置和状态信息,应用程序和资源管理器外壳的初始条件、首选项和卸载数据;计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件的描述、状态和属性;计算机性能记录和底层的系统状态信息,以及各类其他数据。在本例里修改下面的内容:可以通过下面的方法进行操作:Registry
2022-01-25 21:00:00 1447
原创 (69)C#里WriteAllLines、WriteAllBytes和OpenWrite的使用
(69)C#里WriteAllLines、WriteAllBytes和OpenWrite的使用在C#里开发,常常会需要对文件的操作,比如对一些文本文件的操作,在这里学习几个方法对文件的操作:File.WriteAllLines 方法创建一个新文件,在其中写入一个或多个字符串,然后关闭该文件。File.WriteAllBytes(String, Byte[]) 方法创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。 如果目标文件已存在,则覆盖该文件。File.Ope
2022-01-24 18:15:00 1859
python抓取天气并分析 实例源码
2017-08-28
书《深度学习》
2017-03-13
国产8051模拟器
2016-09-10
tinyxml2配套源码
2016-06-27
selenium的浏览器驱动
2016-06-14
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
svm_hog_data.rar
2020-03-02
实现numpy的C++库扩展
2019-11-24
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
胶囊模型的代码
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人