2010-05-04 37 views
2

我正在使用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; 
} 

回答

11

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

在许多情况下,读取文件数据,然后重新写出来,以不同的文件是足够接近的近似副本 - 这样的:

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

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

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

+1

我喜欢复制文件和复制数据之间的区别。这是我多年来在我的肠道中所知道的,但我从来没有见过这么清楚。上帝的工作! – 2010-05-04 12:46:14

+0

上面的代码并不适用于我。看到我的答案在下面... – 2011-05-13 17:39:50

3

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

0

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

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