如何在Visual C ++中复制文件?

我正在使用Visual C ++。 如何将这个文件的内容复制到另一个文件?

UINT32 writeToLog(wstring log) { wfstream file1 (LOG_FILE_NAME, ios_base::out); file1 << log; file1.close(); // want to copy file1 to file2 return 0; } 

你到底想做什么? 如果您需要数据的副本,则可以将其读入并重新写回。 如果您确实需要该文件的副本,则必须使用操作系统特定的调用。

在许多情况下,读取文件数据,然后再写入到不同的文件是一个近似的副本近似 – 像这样:

 ifstream file1(...); ofstream file2(...); std::copy(istream_iterator<char>(file1),istream_iterator<char>(),ostream_iterator<char>(file2)); 

但是,这不是一个副本 – 它创建一个具有相同内容的新文件。 它不会正确处理硬链接或符号链接,它不会正确处理元数据,它只会“复制” 默认文件流 。

如果您需要Windows上的文件副本,则应根据您的具体要求调用CopyFile , CopyFileEx或CopyFileTransacted之一 。

标准C ++没有文件复制功能,除了将文件读入内存并再次写入另一个文件。 在使用Windows时,可以使用CopyFile函数 – 其他操作系统具有类似的操作系统特定功能。

Joe Gauterin的上述代码并不适合我。 我试图复制一个.tga图像文件,所以也许有关于istream_iterator<char>东西搞砸了。 相反,我用:

 ifstream file1(...); ofstream file2(...); char ch; while(file1 && file1.get(ch)) { file2.put(ch); }