Je suis nouveau en C++ et je dois faire une tâche pour l'école.C++ ifstream/fstream corrompre des données
Je dois copier un fichier binaire * sans utiliser d'appels api ou de commandes intégrées au système. À l'école, nous utilisons une machine Windows.
J'ai cherché un peu, et j'ai trouvé que la meilleure façon de copier des données sans utiliser iostream (ifstream/fstream) est d'utiliser de toute api Voici le code que je utilise:
int Open(string Name){
int length;
char * buffer;
ifstream is;
fstream out;
FILE* pFile;
is.open (Name.c_str(), ios::binary);
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();
pFile = fopen ("out.exe" , "w");
fclose(pFile);
out.open("out.exe", ios::binary);
out.write(buffer, length);
out.close();
delete[] buffer;
return 0;
}
isnt Out.exe fonctionne correctement, et après avoir regardé dans winhex.exe Je vois que les données ont été modefied, alors que je ne fais rien avec elle
quelqu'un peut-il me aider?
* le fichier est un simple bonjour programme mondial, il MessageBoxes "Bonjour tout le monde"
EDIT:
Désolé pour mon absence de réaction, il dormait. Quoi qu'il en soit, j'ai ouvert les deux programmes (le résultat et l'original) dans un éditeur hexadécimal. Il semble que tout ce que j'essaie cette ligne:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000200 4C 00 00 00 00 30 00 00 00 02 00 00 00 0D 0A 00 L 0
Les changements dans ce:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000200 4C 00 00 00 00 30 00 00 00 02 00 00 00 0A 00 00 L 0
Comme vous pouvez ou ne peut pas voir en quelque sorte au cours du processus de lecture ou l'écriture d'un octet est supprimé (ou ajouté , ce qui arrive parfois aussi)
Avez-vous essayé de regarder le fichier résultant dans un éditeur hexadécimal pour voir où cela s'est mal passé? Ou copier, disons, un fichier texte, qui serait plus facile à comparer? –
Quel genre de problèmes avez-vous? Qu'est-ce qui se passe avec la fopen aléatoire au milieu de votre fonction? – stonemetal
Comment est-il modifié? Comment la sortie diffère-t-elle de l'entrée? –