 |
打开方式
DesiredAccess
CreationDisposition
备注
rb
GENERIC_READ
OPEN_EXISTING
rb+
GENERIC_READ | GENERIC_WRITE
OPEN_EXISTING
wb
GENERIC_WRITE
CREATE_ALWAYS
wb+
GENERIC_READ | GENERIC_WRITE
CREATE_ALWAYS
ab
GENERIC_WRITE
OPEN_ALWAYS
打开后调用SetFilePointer(hFile, 0, 0, FILE_END);
ab+
GENERIC_READ | GENERIC_WRITE
OPEN_ALWAYS
同上
|
 |
【示例程序】 #include <strsafe.h> #include <Windows.h>
void print(LPCSTR str) { WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), str, lstrlenA(str), NULL, NULL); }
void uprint(LPCTSTR str) { WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), str, lstrlen(str), NULL, NULL); }
int main(void) { DWORD dwNum, dwSize; HANDLE hFile, hHeap; LPSTR lpData; TCHAR str[100];
hFile = CreateFile(TEXT("file.txt"), GENERIC_READ | GENERIC_WRITE, (DWORD)NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // 使用ab+方式打开文件, 但不把指针移到文件末尾 if (hFile == INVALID_HANDLE_VALUE) { uprint(TEXT("无法打开文件\n")); return 1; }
dwSize = GetFileSize(hFile, NULL); StringCbPrintf(str, sizeof(str), TEXT("文件大小: %d字节\n"), dwSize); // 相当于sprintf uprint(str);
uprint(TEXT("文件内容: \n")); hHeap = GetProcessHeap(); lpData = (LPSTR)HeapAlloc(hHeap, (DWORD)NULL, dwSize + 1); // 相当于malloc if (lpData != NULL) { ReadFile(hFile, lpData, dwSize, &dwNum, NULL); // 相当于fread, 但是第4个参数不能为NULL *(lpData + dwSize) = '\0'; print(lpData); HeapFree(hHeap, (DWORD)NULL, lpData); // 相当于free } else uprint(TEXT("读取失败, 内存不足! \n"));
WriteFile(hFile, "New Content\r\n", 13, &dwNum, NULL); // 相当于fwrite, 但是第4个参数不能为NULL
CloseHandle(hFile); // 相当于fclose return 0; }
|
 |
dwNum = SetFilePointer(hFile, 0, 0, FILE_CURRENT); // 相当于ftell StringCbPrintf(str, sizeof(str), TEXT("当前指针位置: %d\n"), dwNum); uprint(str);
|