编程学习
💻Win32编程(5)- 文件操作
00 分钟
2023-4-23
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
Email
文章首发于我的个人博客:欢迎大佬们来逛逛

文件基本操作

CreateFile

可以创建一个文件,或者对文件执行其他的操作。
指定 dwCreationDisposition 可以对存在或者不存在的文件做出相应:
  • CREATE_ALWAYS:如果文件不存在,则创建一个新文件;如果文件存在,则覆盖此文件内容
  • OPEN_EXISTING:如果文件不存在,则失败;否则打开文件。
在当前路径下创建一个文件,叫做:test1.txt

WriteFile

往文件写入内容。
注意nNumberOfBytesToWrite lpNumberOfBytesWritten 的区别:
  • 前一个是指定要写入多少字节
  • 后一个是在写入的时候发生的,即成功写入了多少字节。
我们创建一个含有四个结构体对象的学生信息:
然后把它以二进制形式写入文件:注意我们此例是以二进制字节的形式写入的,如果需要以字符的形式写入,则需要将它转换为 sprintf 形式的buff

SetFilePointer

设置文件的内容指针。
当我们对文件进行写入操作后,请注意,我们当前的文件指针位于文件尾的位置,然后我们如果想要在文件的开头部分再写入内容,则我们必须调整文件的内容指针为开头位置,否则就会出错。
/注意:最后一个参数很重要:
  • FILE_BEGIN:起点位开头位置
  • FILE_CURRENT:起点为当前位置
  • FILE_END:起点位文件结束位置
如果我们想要移动到文件的开头
如果我们想要从开头 移动 10个字节,则:
同理可以带符号,指定移动是往左还是往右

ReadFile

从文件读取内容。
WriteFile函数同理,我们把文件的内容读出来:
如果读取失败,则退出。
如果我们不知道文件有多少内容,则什么时候退出呢?即我们不知道 for循环的次数为4
我们可以根据第四个参数来确定,表示成功读取了多少字节数量
如果为0,则不就说明到达文件末尾了吗?

其他操作

我们对文件操作完成之后,一定要记得关闭文件句柄
对文件的拷贝操作
删除文件

文件的遍历

如何遍历一个文件夹中所有的文件呢?使用递归即可。

GetCurrentDirectory

获得当前文件夹的路径。
我们要遍历当前文件夹下的所有文件,当然要首先获得当前文件夹的路径名称

travelPath递归

我们对当前的文件路径进行以下操作:
  1. 获得当前文件夹下所有的文件
  1. 如果文件属于文件夹:以此文件夹的路径进入递归
  1. 如果文件属于文件:打印当前的文件路径。
如何获得当前文件夹下所有的文件呢?
filename表示我们当前的文件夹路径,我们可以用sprintf来格式化。
find_data是一个结构体,它里面存储着对于文件的信息
接着对文件进行分类,然后继续递归或者打印:

文件映射虚拟内存

内存映射文件是由一个文件到一块内存的映射,使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问,因此内存文件映射非常适合于用来管理大文件。
  1. 打开文件
  1. 创建文件映射
  1. 加载文件映射
  1. 操作
  1. 卸载文件映射
  1. 删除文件映射
  1. 删除文件句柄
具体操作如下所示:
API:
  • CreateFileMapping:创建文件映射
  • MapViewOfFile:加载文件映射
  • UnmapViewOfFile:卸载文件映射

完整代码

项目源码地址:

 

评论
  • Twikoo
  • Valine