如果我使用C或C++編寫程序,將Windows/CMD提示中的非文本文件(.mp3,.avi等)從一個位置複製到另一個位置,我是否真的依靠Windows API來執行所有操作爲我工作?複製文本文件是一回事,我可以打開它並按字符或字符串複製字符。有人能給我一個簡短的概要(如果你有參考鏈接,甚至更好,我只是問,因爲我找不到任何合理的解釋它)關於非文本文件複製程序如何工作?使用C或C++複製非文本文件?
謝謝大家!
如果我使用C或C++編寫程序,將Windows/CMD提示中的非文本文件(.mp3,.avi等)從一個位置複製到另一個位置,我是否真的依靠Windows API來執行所有操作爲我工作?複製文本文件是一回事,我可以打開它並按字符或字符串複製字符。有人能給我一個簡短的概要(如果你有參考鏈接,甚至更好,我只是問,因爲我找不到任何合理的解釋它)關於非文本文件複製程序如何工作?使用C或C++複製非文本文件?
謝謝大家!
CopyFile已經夠用了,我
BOOL WINAPI CopyFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName,
_In_ BOOL bFailIfExists
);
(從MSDN)
在這一天結束時,每個文件是一個字節序列。您可以逐字節(或更大的塊)複製任何文件。但是你不應該干擾文件中的數據。以二進制模式打開文件並複製。如果你使用這種方法,你的程序將適用於任何有小改動的平臺。如果您使用Windows API,只將程序限制在Windows平臺上。
不要複製逐字節的字節。做更大的塊,因爲它更有效 –
@EdHeal修正,謝謝。 – Chinna
FILE *inFile, *outFile;
inFile = fopen(inFilePath, "rb");
outFile = fopen(outFilePath, "wb");
long getFileSize(FILE *file) {
long curPos, endPos;
curPos = ftell(file);
fseek(file, 0, 2);
endPos = ftell(file);
fseek(file, curPos, 0);
return endPos;
}
size_t bufferLength = getFileSize(inFile);
uint8_t *buffer = malloc(bufferLength);
void copyFile(FILE *inFile, FILE *outFile) {
fread(buffer, bufferLength, 1, inFile);
fwrite(buffer, bufferLength, 1, outFile);
}
copyFile(inFile, outFile);
fclose(inFile);
fclose(outFile);
inFilePath
和outFilePath
必須都指向其中包含的路徑相應的文件中的字符。
上面的代碼是可移植的,以防你正在尋找不是平臺特定的東西。我將把錯誤處理留給你。此外,這是寫在匆忙所以請在使用前檢查它。
你知道可以用以下兩種模式之一打開文件:文本還是二進制文件? –
按字符或字符串複製字符也是字節複製。因此,複製一個非文本文件,你可以用二進制模式打開它並逐字節複製。 – Abhineet
http://stackoverflow.com/questions/1006797/tried-and-true-simple-file-copying-code-in-c –