注意: CreateFile 跟 fopen 不同,打開文件時不區分 文本方式 或 二進制 方式 ReadFile 或 WriteFile 都是對二進制數據進行操作 HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, // 文件路徑 __in DWORD dwDesiredAccess, // 訪問權限,GENERIC_READ | GENERIC_WRITE __in DWORD dwShareMode, // 共享模式,NULL | FILE_SHARE_READ | FILE_SHARE_WRITE __in LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全屬性 __in DWORD dwCreationDisposition, // 創建配置,CREATE_ALWAYS | CREATE_NEW | OPEN_ALWAYS | OPEN_EXISTING __in DWORD dwFlagsAndAttributes, // 擴展屬性,NULL | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY __in HANDLE hTemplateFile // 指定一個文件句柄,新文件將從這個文件中復制擴展屬性。NULL ); BOOL WINAPI ReadFile( __in HANDLE hFile, // 文件句柄 __out LPVOID lpBuffer, // 接收數據用的 buffer __in DWORD nNumberOfBytesToRead, // 要讀取的字節數 __out LPDWORD lpNumberOfBytesRead, // 實際讀取到的字節數 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 結構,一般設定為 NULL ); BOOL WINAPI WriteFile( __in HANDLE hFile, // 文件句柄 __in LPCVOID lpBuffer, // 要寫入的數據 __in DWORD nNumberOfBytesToWrite, // 要寫入的字節數 __out LPDWORD lpNumberOfBytesWritten, // 實際寫入的字節數 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 結構,一般設定為 NULL ); DWORD WINAPI GetFileSize( __in HANDLE hFile, // 文件句柄 __out LPDWORD lpFileSizeHigh // high-order 的返回值,一般設定為 NULL ); 讀文件: void read(const wchar_t* strPath) { HANDLE hFile = ::CreateFile(strPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL); if (hFile != INVALID_HANDLE_VALUE) { DWORD nFileSize = ::GetFileSize(hFile, NULL); char* lpBuffer = new char[nFileSize]; DWORD nNumberOfBytesRead; BOOL bRet = ::ReadFile(hFile, lpBuffer, nFileSize, &nNumberOfBytesRead, NULL); // TODO ... delete[] lpBuffer; CloseHandle(hFile); } } 寫文件: void write(const wchar_t* strPath, const wchar_t* strContent, const int nContentSize) { HANDLE hFile = ::CreateFile(strPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, NULL, NULL); if (hFile != INVALID_HANDLE_VALUE) { DWORD nNumberOfBytesWritten; ::WriteFile(hFile, strContent, nContentSize, &nNumberOfBytesWritten, NULL); // TODO ... CloseHandle(hFile); } }