1.CreateFile最初是專門為文件交互而開發的,但后來被擴展和增強,以包括Windows開發人員可用的大多數其他類型的I / O設備和機制
HANDLE WINAPI CreateFile( _In_ LPCTSTR lpFileName, _In_ DWORD dwDesiredAccess, _In_ DWORD dwShareMode, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _In_ DWORD dwCreationDisposition, _In_ DWORD dwFlagsAndAttributes, _In_opt_ HANDLE hTemplateFile );
#include <stdio.h> #include <windows.h> int main() { HANDLE hFILE=CreateFile("1.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFILE==INVALID_HANDLE_VALUE) { printf("CreateFile error\n"); return 0; } if(SetFilePointer(hFILE,0,NULL,FILE_END)==-1) { printf("SetFilePointer error\n"); return 0; } char buff[256]="hello"; DWORD dwWrite; if(!WriteFile(hFILE,&buff,strlen(buff),&dwWrite,NULL)) { printf("WriteFile error\n"); return 0; } printf("write %d.\n",dwWrite); printf("done.\n"); CloseHandle(hFILE); return 0; }
2. ReadFile函數 從文件指針指向的位置開始將數據讀出到一個文件中, 且支持同步和異步操作,如果文件打開方式沒有指明FILE_FLAG_OVERLAPPED的話,當程序調用成功時,它將實際讀出文件的字節數保存到lpNumberOfBytesRead指明的地址空間中。FILE_FLAG_OVERLAPPED 允許對文件進行重疊操作。
BOOL WINAPI ReadFile( __in HANDLE hFile, // 文件句柄 __out LPVOID lpBuffer, // 接收數據用的 buffer __in DWORD nNumberOfBytesToRead, // 要讀取的字節數 __out LPDWORD lpNumberOfBytesRead, // 實際讀取到的字節數 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 結構,一般設定為 NULL );
BOOL Read(char *filePath) { HANDLE pFile; DWORD fileSize; char *buffer,*tmpBuf; DWORD dwBytesRead,dwBytesToRead,tmpLen; pFile = CreateFile(filePath,GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, //打開已存在的文件 FILE_ATTRIBUTE_NORMAL, NULL); if ( pFile == INVALID_HANDLE_VALUE) { printf("open file error!\n"); CloseHandle(pFile); return FALSE; } fileSize = GetFileSize(pFile,NULL); //得到文件的大小 buffer = (char *) malloc(fileSize); ZeroMemory(buffer,fileSize); dwBytesToRead = fileSize; dwBytesRead = 0; tmpBuf = buffer; do{ //循環讀文件,確保讀出完整的文件 ReadFile(pFile,tmpBuf,dwBytesToRead,&dwBytesRead,NULL); if (dwBytesRead == 0) break; dwBytesToRead -= dwBytesRead; tmpBuf += dwBytesRead; } while (dwBytesToRead > 0); // TODO 處理讀到的數據 buffer free(buffer); CloseHandle(pFile); return TRUE; }
3.WriteFile函數
BOOL WINAPI WriteFile( __in HANDLE hFile, // 文件句柄 __in LPCVOID lpBuffer, // 要寫入的數據 __in DWORD nNumberOfBytesToWrite, // 要寫入的字節數 __out LPDWORD lpNumberOfBytesWritten, // 實際寫入的字節數 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 結構,一般設定為 NULL );
BOOL Write(char *buffer, DWORD contentLen) { HANDLE pFile; char *tmpBuf; DWORD dwBytesWrite,dwBytesToWrite; pFile = CreateFile(filePath,GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, //總是創建文件 FILE_ATTRIBUTE_NORMAL, NULL); if ( pFile == INVALID_HANDLE_VALUE) { printf("create file error!\n"); CloseHandle(pFile); return FALSE; } dwBytesToWrite = contentLen; dwBytesWrite = 0; tmpBuf = buffer; do{ //循環寫文件,確保完整的文件被寫入 WriteFile(pFile,tmpBuf,dwBytesToWrite,&dwBytesWrite,NULL); dwBytesToWrite -= dwBytesWrite; tmpBuf += dwBytesWrite; } while (dwBytesToWrite > 0); CloseHandle(pFile); return TRUE; } 鏈接:https://www.365jz.com/article/24618 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
將數據寫入一個文件。該函數比fwrite函數要靈活的多。也可將這個函數應用於對通信設備、管道、套接字以及郵槽的處理。返回時,TRUE(非零)表示成功,否則返回零。會設置GetLastError
鏈接:https://www.365jz.com/article/24618
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
鏈接:https://www.365jz.com/article/24618
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。