2010-05-04 6 views
2

J'utilise Visual C++. Comment copier le contenu de ce fichier dans un autre fichier?Comment copier des fichiers dans 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; 
} 

Répondre

11

Que voulez-vous exactement faire? Si vous avez besoin d'une copie des données, vous pouvez les lire et les réécrire. Si vous avez vraiment besoin d'une copie du fichier, vous devez utiliser des appels spécifiques au système d'exploitation.

Dans de nombreux cas, la lecture des données de fichier, puis écrire à nouveau dans un autre fichier est une approximation assez proche d'une copie - comme ceci:

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

Quoi qu'il en est vraiment pas une copie - Il crée un nouveau fichier avec le même contenu. Il ne gérera pas correctement les liens physiques ou les liens symboliques, il ne gérera pas correctement les métadonnées et ne "copiera" que le default file stream.

Si vous avez besoin d'une copie de fichier sur Windows, vous devez appeler l'un des CopyFile, CopyFileEx ou CopyFileTransacted en fonction de vos besoins exacts.

+1

J'aime la distinction entre copier le fichier et copier les données. C'est quelque chose que je connais depuis des années, mais je ne l'ai jamais vu aussi clairement. Bon travail! –

+0

Le code ci-dessus n'a pas fonctionné pour moi. Voir ma réponse ci-dessous ... –

3

Le standard C++ n'a pas de fonction de copie de fichiers, à part lire le fichier en mémoire et l'écrire à nouveau dans un fichier différent. Comme vous utilisez Windows, vous pouvez utiliser la fonction CopyFile - les autres systèmes d'exploitation ont des fonctions similaires à celles du système d'exploitation.

0

Le code ci-dessus de Joe Gauterin n'a pas fonctionné pour moi. J'essayais de copier un fichier d'image .tga, donc peut-être quelque chose à propos de istream_iterator<char> foiré. Au lieu de cela j'ai utilisé:

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