如果我用C或C ++编写程序,在Windows / CMD提示符中将非文本文件(.mp3,.avi等)从一个位置复制到另一个位置,我是否真的依赖Windows API来做我的所有工作?复制文本文件是一回事,我可以打开它并按字符或逐字符串复制字符。有人可以给我一个简短的断言(如果你有参考链接,甚至更好。我只是问,因为我找不到任何合理的解释它。)关于非文本文件复制程序如何工作?
谢谢大家!
答案 0 :(得分:7)
CopyFile对我来说已经足够了
BOOL WINAPI CopyFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName,
_In_ BOOL bFailIfExists
);
(来自msdn)
答案 1 :(得分:1)
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
必须都是指向包含相应文件路径的字符的指针。
以上代码是可移植的,以防您正在寻找非平台特定的内容。我会把错误处理留给你。此外,这是写得很匆忙所以请在使用前进行检查。
答案 2 :(得分:0)
在一天结束时,每个文件都是一个字节序列。您可以逐字节(或更大的块)复制任何文件。但是你不应该打扰文件中的数据。以二进制模式打开文件并复制。如果您使用此方法,您的程序将适用于任何变化较小的平台。如果您使用的是Windows API,只能将程序限制在Windows平台上。