type
status
date
slug
summary
tags
category
icon
password
Email
文章首发于我的个人博客:欢迎大佬们来逛逛
文件基本操作
CreateFile
可以
创建一个文件
,或者对文件执行其他的操作。指定
dwCreationDisposition
可以对存在或者不存在的文件做出相应:- CREATE_ALWAYS:如果文件不存在,则创建一个新文件;如果文件存在,则覆盖此文件内容
- OPEN_EXISTING:如果文件不存在,则失败;否则打开文件。
在当前路径下创建一个文件,叫做:
test1.txt
WriteFile
往文件写入内容。
注意
nNumberOfBytesToWrite
与 lpNumberOfBytesWritten
的区别:- 前一个是指定要写入多少字节
- 后一个是在写入的时候发生的,即成功写入了多少字节。
我们创建一个含有四个结构体对象的学生信息:
然后把它以
二进制
形式写入文件:注意我们此例是以二进制字节的形式写入的,如果需要以字符的形式写入,则需要将它转换为 sprintf 形式的buffSetFilePointer
设置文件的内容指针。
当我们对文件进行写入操作后,请注意,我们当前的文件指针位于
文件尾
的位置,然后我们如果想要在文件的开头部分再写入内容,则我们必须调整文件的内容指针为开头位置,否则就会出错。/注意:最后一个参数很重要:
- FILE_BEGIN:起点位开头位置
- FILE_CURRENT:起点为当前位置
- FILE_END:起点位文件结束位置
如果我们想要移动到
文件的开头
:如果我们想要从开头 移动 10个字节,则:
同理可以带符号,指定移动是往左还是往右
ReadFile
从文件读取内容。
与
WriteFile
函数同理,我们把文件的内容读出来:如果读取失败,则退出。
如果我们不知道文件有多少内容,则什么时候退出呢?即我们不知道 for循环的次数为4
我们可以根据第四个参数来确定,表示成功读取了多少字节数量
如果为0,则不就说明到达文件末尾了吗?
其他操作
我们对文件操作完成之后,一定要记得关闭文件句柄
对文件的拷贝操作:
删除文件:
文件的遍历
如何遍历一个文件夹中所有的文件呢?使用递归即可。
GetCurrentDirectory
获得当前文件夹的路径。
我们要遍历当前文件夹下的所有文件,当然要首先获得
当前文件夹的路径名称
travelPath递归
我们对当前的文件路径进行以下操作:
- 获得当前文件夹下所有的文件
- 如果文件属于文件夹:以此文件夹的路径进入递归
- 如果文件属于文件:打印当前的文件路径。
如何获得当前文件夹下所有的文件呢?
filename表示我们当前的文件夹路径,我们可以用
sprintf
来格式化。find_data是一个结构体,它里面存储着对于文件的信息
接着对文件进行分类,然后继续递归或者打印:
文件映射虚拟内存
内存映射文件是由一个文件到一块内存的映射,使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问,因此内存文件映射非常适合于用来管理大文件。
- 打开文件
- 创建文件映射
- 加载文件映射
- 操作
- 卸载文件映射
- 删除文件映射
- 删除文件句柄
具体操作如下所示:
API:
- CreateFileMapping:创建文件映射
- MapViewOfFile:加载文件映射
- UnmapViewOfFile:卸载文件映射
完整代码
项目源码地址:
- 作者:Yuleo
- 链接:https://www.helloylh.com/article/windows5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。