Windows系統爲文件的刪除、複製、重命名或移動文件提供了相應的API函數。刪除文件使用DeleteFile函數;複製文件使用CopyFile函數;重命名文件和移動文件實際是一個操做,使用MoveFile函數。這幾個函數的使用都很是簡單,下面分別介紹。windows
(1) DeleteFile。
DeleteFile的功能是刪除文件。以文件路徑做爲輸入,指向須要刪除的文件。文件路徑能夠是相似於「c:\files\delete.txt」的絕對路徑,也能夠是相似於「.\delete.txt」的相對路徑,二相對於可執行文件所在的路徑。
◇參數
lpFileName:輸入參數,所要刪除的文件的相對路徑或絕對路徑。
◇返回值
返回BOOL值,表示文件刪除是否成功。
◇使用說明
若是程序返回失敗,能夠使用GetLastError函數獲取錯誤信息。緩存
(2) CopyFile。
CopyFile的功能是複製文件。經過參數輸入複製文件和源路徑和目的路徑,路徑能夠是絕對路徑也能夠是相對路徑,還能夠經過參數指明若是目的路徑已經存在文件,是否覆蓋。能夠使用CopyFileEx函數進行更爲高級的操做,好比在複製進行過程當中取消複製等。CopyFileEx能夠指定
一個回調函數來處理文件複製中所可能發生的各類狀況。
◇參數
lpExistingFileName:輸入參數,已經存在的所需複製文件的源路徑。
lpNewFileName:輸入參數,新文件路徑,複製文件的目的路徑。
bFailIfExists:輸入參數,指明若是在目的路徑存在文件時是否覆安全
將不覆蓋已經存在的文件,若是存在,則返回失敗。這時使用GetLastError獲取錯誤代碼,將返回80(Ox50)。
◇返回值
返回BOOL值,表示文件複製是否成功。
◇使用說明
若是程序返回失敗,能夠使用GetLastError函數獲取錯誤信息。app
(3) MoveFile。
MoveFile的功能是移動、重命名文件和目錄。經過參數輸入源路徑和目的路徑,路徑能夠是絕對路徑也能夠是相對路徑,若是目的路徑的文件或目錄已經存在,則返回失敗。能夠使用MoveFileEx函數來指定更多的選項,若是已經存在是否替換等。還能夠使用MoveFileWithProgress指定一個回調函數來處理文件移動中所可能發生的各類狀況。函數
◇參數
lpExistingFileName:輸入參數,爲已經存在的所需移動文件的源路徑。
lpNewFileName:輸入參數,新文件路徑,移動文件的目的路徑。
◇返回值
返回BOOL值,表示文件移動是否成功。
◇使用說明
若是程序返回失敗,能夠使用GetLastError函數獲取錯誤信息。spa
(4) CopyFileEx、MoveFileEx以及MoveFileWithProgreSS.
這3個API函數功能更豐富,再也不作詳細介紹.指針
本實例使用DeleteFile、CopyFile、MoveFile來完成文件的刪除、複製和移動功能。編譯生成可執行文件,經過參數來指定程序完成的功能。-d參數表示刪除文件,後面跟所需刪除的文件路徑;-m參數表示移動、重命名文件,以後的參數分別是源路徑和目的路徑;-c參數表示複製文件,以後跟源路徑和目的路徑。在複製文件過程當中,若是文件已經存在,會提醒用戶是否覆蓋。code
1 /* ************************************ 2 *《精通Windows API》 3 * 示例代碼 4 * wr.c 5 * 4.3.2 建立、打開、讀寫文件,獲取文件大小 6 **************************************/ 7 8 /* 頭文件 */ 9 #include <windows.h> 10 #include <stdio.h> 11 12 /* ************************************ 13 * DWORD ReadFileContent(LPSTR szFilePath) 14 * 功能 獲取文件大小 15 * 讀取文件內容,並以16進制的形式打印出來 16 * 參數 LPSTR szFilePath 17 * 文件路徑 18 **************************************/ 19 DWORD ReadFileContent(LPSTR szFilePath) 20 { 21 //文件大小 22 HANDLE hFileRead; 23 //保存文件大小 24 LARGE_INTEGER liFileSize; 25 //成功讀取的文件數據大小 26 DWORD dwReadedSize; 27 //累加計算已經讀取數據的大小 28 LONGLONG liTotalRead = 0; 29 //文件數據緩存 30 BYTE lpFileDataBuffer[32]; 31 32 //打開已經存在的文件,讀取內容。 33 hFileRead = CreateFileA(szFilePath,// 要打開的文件名 34 GENERIC_READ, // 以讀方式打開 35 FILE_SHARE_READ, // 可共享讀 36 NULL, // 默認安全設置 37 OPEN_EXISTING, // 只打開已經存在的文件 38 FILE_ATTRIBUTE_NORMAL, // 常規文件屬性 39 NULL); // 無模板 40 41 //打開文件是否成功。 42 if(hFileRead==INVALID_HANDLE_VALUE) 43 { 44 printf("打開文件失敗:%d",GetLastError()); 45 } 46 47 if(!GetFileSizeEx(hFileRead,&liFileSize)) 48 { 49 printf("獲取文件大小失敗:%d",GetLastError()); 50 } 51 else 52 { 53 printf("文件大小爲:%d/n",liFileSize.QuadPart); 54 } 55 56 //循環讀取並打印文件內容 57 while(TRUE) 58 { 59 DWORD i; 60 61 if(!ReadFile(hFileRead, //讀文件的句柄 62 lpFileDataBuffer, //存儲讀取的文件內容 63 32, //讀的大小(字節) 64 &dwReadedSize, //實際讀取的大小 65 NULL)) //不使用Overlapped 66 { 67 printf("讀文件錯誤:%d/n",GetLastError()); 68 break; 69 } 70 printf("讀取了%d字節,文件內容是:",dwReadedSize); 71 72 for(i=0; i<dwReadedSize; i++) 73 { 74 printf("0x%x ",lpFileDataBuffer[i]); 75 } 76 printf("/n"); 77 liTotalRead += dwReadedSize; 78 if(liTotalRead == liFileSize.QuadPart) 79 { 80 printf("讀文件結束/n"); 81 break; 82 } 83 } 84 CloseHandle(hFileRead); 85 return 0; 86 } 87 88 /* ************************************ 89 * SaveDataToFile 90 * 功能 將數據存儲到文件末尾 91 * 參數 LPSTR szFilePath 文件路徑 92 * LPVOID lpData 需存儲的數據 93 * DWORD dwDataSize 數據大小(字節) 94 **************************************/ 95 DWORD SaveDataToFile( 96 LPSTR szFilePath, 97 LPVOID lpData, 98 DWORD dwDataSize) 99 { 100 //文件句柄 101 HANDLE hFileWrite; 102 //成功寫入的數據大小 103 DWORD dwWritedDateSize; 104 105 //打開已經存在的文件,讀取內容。 106 hFileWrite = CreateFileA(szFilePath, // 要打開的文件名 107 GENERIC_WRITE, // 以寫方式打開 108 0, // 可共享讀 109 NULL, // 默認安全設置 110 OPEN_ALWAYS, // 打開已經存在的文件,沒用則建立 111 FILE_ATTRIBUTE_NORMAL, // 常規文件屬性 112 NULL); // 無模板 113 114 //判斷是否打開成功 115 if(hFileWrite==INVALID_HANDLE_VALUE) 116 { 117 printf("打開文件失敗:%d/n",GetLastError()); 118 } 119 120 //設置文件指針到文件尾 121 SetFilePointer(hFileWrite,0,0,FILE_END); 122 123 //將數據寫入文件 124 if(!WriteFile(hFileWrite,lpData,dwDataSize,&dwWritedDateSize,NULL)) 125 { 126 printf("寫文件失敗:%d/n",GetLastError()); 127 } 128 else 129 { 130 printf("寫文件成功,寫入%d字節。/n",dwWritedDateSize); 131 } 132 CloseHandle(hFileWrite); 133 return 0; 134 } 135 136 /* ************************************ 137 * int main(void) 138 * 功能 演示使用SaveDataToFile和ReadFileContent函數 139 **************************************/ 140 int main(void) 141 { 142 LPSTR szFileData = "這是一個例子"; 143 SaveDataToFile("C://show.txt",szFileData,lstrlenA(szFileData)); 144 ReadFileContent("C://show.txt"); 145 return 0; 146 }