WIN--文件读写
创建/打开文件:CreateFile
CreateFile这个API是文件读写的核心下面我们来看看他的使用方式
HANDLE CreateFileA([in] LPCSTR lpFileName,[in] DWORD dwDesiredAccess,[in] DWORD dwShareMode,[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,[in] DWORD dwCreationDisposition,[in] DWORD dwFlagsAndAttributes,[in, optional] HANDLE hTemplateFile
);
第一个参数 如果我们想要创建或者打开的是一个文件那么这里就写文件的路径 如果是其他IO设备就写设备名
第二个参数 是请求对文件或设备的访问权限 可以为GENERIC_READ(只读),GENERIC_WRITE(只写)或者GENERIC_ALL(可读可写)
第三个参数 请求的文件或设备的共享模式(其他进程对该文件权限)我们通常写为FILE_SHARE_READ(其他进程可读)
第四个参数 我们通常写为NULL
*第五个参数(重点) 对存在或不存在的文件或设备执行的操作 下面为这个参数的不同情况
CREATE_ALWAYS
2
始终创建新文件。 如果指定的文件存在且可写,则函数将截断文件、函数成功,最后错误代码设置为 ERROR_ALREADY_EXISTS(183)。
如果指定的文件不存在且路径有效,则会创建一个新文件,该函数会成功,最后一个错误代码设置为零。
有关详细信息,请参阅本主题的“备注”部分。
CREATE_NEW
1
仅当该文件尚不存在时,才会创建一个新文件。 如果指定的文件存在,函数将失败,最后一个错误代码设置为 ERROR_FILE_EXISTS(80)。
如果指定的文件不存在,并且是可写位置的有效路径,则会创建一个新文件。
OPEN_ALWAYS
4
始终打开文件。 如果指定文件存在,则函数成功,最后一个错误代码设置为 ERROR_ALREADY_EXISTS(183)。
如果指定的文件不存在并且是可写位置的有效路径,该函数将创建一个文件,最后一个错误代码设置为零。
OPEN_EXISTING
3
仅当文件或设备存在时才打开该文件或设备。 如果指定的文件或设备不存在,该函数将失败,最后一个错误代码设置为 ERROR_FILE_NOT_FOUND(2)。
有关设备的详细信息,请参阅“备注”部分。
TRUNCATE_EXISTING
5
打开一个文件并截断它,使其大小为零字节,仅当它存在时。 如果指定的文件不存在,该函数将失败,最后一个错误代码设置为 ERROR_FILE_NOT_FOUND(2)。
调用过程必须打开文件,并将 GENERIC_WRITE 位设置为 dwDesiredAccess 参数的一部分。
第六个参数 我们通常写为FILE_ATTRIBUTE_NORMAL即可
第七个参数 通常写为NULL
注意:如果CreatFile这个函数调用失败返回值为INVALID_HANDLE_VALUE 成功为当前操作的文件或者IO设备的句柄 打开了记得要关闭
总结:CreateFile这个API可以打开一个文件或IO设备也可以创建一个文件或者IO设备 具体的操作由参数来决定
//创建一个文件HANDLE hFile = CreateFileA("C:\\Users\\20622\\Desktop\\zhao.txt",GENERIC_ALL, //给予文件的权限FILE_SHARE_READ, //其他进程可对该文件进行的操作NULL,CREATE_ALWAYS, //打开方式FILE_ATTRIBUTE_NORMAL, //通常就为FILE_ATTRIBUTE_NORMALNULL);if (hFile == INVALID_HANDLE_VALUE){cout << GetLastError();return 0;}CloseHandle(hFile);
向文件中写入WriteFile
char buffer[] = "FUCK YOU \r\n HA HA HA HA";
WriteFile(hFile, buffer, sizeof(buffer), NULL, NULL);
从文件中读取
注意读取的时候我们要修改一下CreateFile的参数CREATE_ALWAYS改为OPEN_EXISTING
我们在获取文件的大小的时候要调用API:GetFileSize--第一个参数为你要获取文件的句柄第二个参数填NULL即可
DWORD dwFileSize = GetFileSize(hFile, NULL);
PCHAR FileBuffer = new char[dwFileSize];
memset(FileBuffer, 0, dwFileSize);
ReadFile(hFile, FileBuffer, dwFileSize, NULL, NULL);