Как скопировать файлы в Visual C ++? - PullRequest
2 голосов
/ 04 мая 2010

Я использую 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;
 }

Ответы [ 3 ]

11 голосов
/ 04 мая 2010

Что именно вы хотите сделать? Если вам нужна копия данных, вы можете прочитать ее и записать обратно. Если вам действительно нужна копия файла, вы должны использовать вызовы, специфичные для ОС.

Во многих случаях чтение данных файла и последующая запись их в другой файл является достаточно близким приближением к копии - например, так:

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

Однако на самом деле это не копия, а создание нового файла с тем же содержимым. Он не будет корректно обрабатывать жесткие ссылки или символические ссылки, он не будет корректно обрабатывать метаданные и будет только «копировать» поток файлов по умолчанию .

Если вам нужна копия файла в Windows, вам следует вызвать один из CopyFile , CopyFileEx или CopyFileTransacted в зависимости от ваших точных требований.

3 голосов
/ 04 мая 2010

Стандарт C ++ не имеет возможности копирования файлов, кроме чтения файла в память и повторной записи его в другой файл. Поскольку вы используете Windows, вы можете использовать функцию CopyFile - другие ОС имеют аналогичные функции, специфичные для ОС.

0 голосов
/ 13 мая 2011

Приведенный выше код от Джо Готерина не работает для меня. Я пытался скопировать файл изображения .tga, так что, может быть, что-то около istream_iterator<char> облажалось. Вместо этого я использовал:

ifstream file1(...);
ofstream file2(...);
char ch;
while(file1 && file1.get(ch))
{
  file2.put(ch);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...