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

使用C或C++;要复制非文本文件? 如果我在C或C++中编写一个程序来将一个非文本文件(.mp3,avi等)从一个位置复制到另一个位置,在Windows/CMD提示符下,我是否真的依赖Windows API来完成所有的工作?复制文本文件是一回事,我可以打开它,一个字符一个字符地复制,或者一个字符串一个字符串地复制。有人能给我一个简短的概述(如果你有参考链接,更好。我只是问,因为我找不到任何合理的解释。)关于非文本文件复制程序将如何工作,c++,c,file-io,copy,C++,C,File Io,Copy,谢谢大家 对我来说已经足够好了 BOOL WINAPI CopyFile( _In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName, _In_ BOOL bFailIfExists ); (来自msdn)一天结束时,每个文件都是一个字节序列。您可以逐字节(或更大的块)复制任何文件。但是您不应该干扰文件中的数据。以二进制模式打开文件并复制。如果您使用这种方法,您的程序将在任何平台上运行,只需稍作更改。如果您使用的w

谢谢大家

对我来说已经足够好了

BOOL WINAPI CopyFile(
  _In_  LPCTSTR lpExistingFileName,
  _In_  LPCTSTR lpNewFileName,
  _In_  BOOL bFailIfExists
);

(来自msdn)

一天结束时,每个文件都是一个字节序列。您可以逐字节(或更大的块)复制任何文件。但是您不应该干扰文件中的数据。以二进制模式打开文件并复制。如果您使用这种方法,您的程序将在任何平台上运行,只需稍作更改。如果您使用的windows API将您的程序仅限于windows平台

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
都必须是指向包含相应文件路径的字符的指针


上面的代码是可移植的,以防您正在寻找不特定于平台的东西。我将把错误处理留给你。此外,这是匆忙编写的,因此请在使用前仔细阅读。

您知道,文件可以以两种模式之一打开:文本或二进制?逐字符或逐字符串复制也是字节复制。所以,复制一个非文本文件时,你要以二进制模式打开它,然后逐字节复制。不要逐字节复制。做得越大越好efficent@EdHeal修好了,谢谢。