使用C或C ++复制非文本文件?

时间:2014-01-09 06:08:45

标签: c++ c file-io copy

如果我用C或C ++编写程序,在Windows / CMD提示符中将非文本文件(.mp3,.avi等)从一个位置复制到另一个位置,我是否真的依赖Windows API来做我的所有工作?复制文本文件是一回事,我可以打开它并按字符或逐字符串复制字符。有人可以给我一个简短的断言(如果你有参考链接,甚至更好。我只是问,因为我找不到任何合理的解释它。)关于非文本文件复制程序如何工作?

谢谢大家!

3 个答案:

答案 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);

inFilePathoutFilePath必须都是指向包含相应文件路径的字符的指针。

以上代码是可移植的,以防您正在寻找非平台特定的内容。我会把错误处理留给你。此外,这是写得很匆忙所以请在使用前进行检查。

答案 2 :(得分:0)

在一天结束时,每个文件都是一个字节序列。您可以逐字节(或更大的块)复制任何文件。但是你不应该打扰文件中的数据。以二进制模式打开文件并复制。如果您使用此方法,您的程序将适用于任何变化较小的平台。如果您使用的是Windows API,只能将程序限制在Windows平台上。