前言
一切皆文件。
操作文件的函数总是比你想象的更强大,windows操作文件的函数返回是HANDLE句柄,它可以标识一块内存,所以它的功能也是远比文件更强大。
文件读写
打开/创建文件
HANDLE CreateFile(
LPCTSTR lpFileName, // pointer to name of the file文件名称路径
DWORD dwDesiredAccess, // access (read-write) mode打开方式
DWORD dwShareMode, // share mode共享方式(其他进程共同操作时权限)
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
// pointer to security attributes安全属性,设为NULL
DWORD dwCreationDisposition, // how to create打开/创建方式
DWORD dwFlagsAndAttributes, // file attributes打开追加属性
HANDLE hTemplateFile // handle to file with attributes to
// copy 设为NULL
);写文件
BOOL WriteFile(
HANDLE hFile, // 文件句柄
LPCVOID lpBuffer, // 缓冲数据的地址
DWORD nNumberOfBytesToWrite, // 准备写入的数据大小
LPDWORD lpNumberOfBytesWritten, // 实际写入的数据大小(返回值)
LPOVERLAPPED lpOverlapped // 同步/异步方式 NULL为同步
);
最后的同步/异步方式将影响这个函数是否会产生阻塞,如果同步方式下,写入的数据未能投递到系统写队列里,将产生阻塞读文件
BOOL ReadFile(
HANDLE hFile, // 文件句柄
LPVOID lpBuffer, // 读出数据存放的缓冲地址
DWORD nNumberOfBytesToRead, // 准备读出的数据大小
LPDWORD lpNumberOfBytesRead, // 实际读出的数据大小
LPOVERLAPPED lpOverlapped // 同步/异步方式 NULL为同步
);- 读取文件大小和设定文件读取位置
DWORD GetFileSize(
HANDLE hFile, // 文件句柄
LPDWORD lpFileSizeHigh
// 文件大小的高32位存放地址
);返回值是文件大小低32
设置文件读取/写入偏移位置
DWORD SetFilePointer(
HANDLE hFile, // 文件地址
LONG lDistanceToMove, // 偏移大小低32位
PLONG lpDistanceToMoveHigh,
// 偏移大小高32位
DWORD dwMoveMethod // 偏移相对位置
);
- 其它操作函数
CopyFile() DeleteFile() MoveFile(),
其中MoveFile在操作目录时是不能跨盘的
文件遍历
文件遍历利用FindFirstFile. FindNextFile. FindClose3个函数配合使用,首先用FindFirstFile打开一个目录,该函数返回一个文件句柄,循环调用FindNextFile,它的返回值如果是FALSE说明遍历完毕,而文件的信息都会记录在FindFirstFile和FindNextFile的第二个结构体参数里,
最后FindClose关闭这个文件句柄。