Datei in 512Byte Blöcken kopieren?



  • void DateiKopieren(string& inf, string& outf)
    {
    	unsigned char  buffer[512];
    	int f;
       fstream infile, outfile;
    	infile.open(inf.c_str(), ios::in | ios::binary);
       outfile.open(outf.c_str(),ios::out | ios:: binary);
       while(infile.read((char*)&f, sizeof(*buffer)))
    		outfile.write((char*)&f, sizeof(*buffer));
       infile.close();
       outfile.close();
    
    }
    

    Hallo habe eine Frage zum Quelltext oben.
    Als Übung soll ein kleines programm geschrieben werden, dass eine beliebige Datei in 512Byte Häppchen kopieren soll. Das funktioniert soweit, bloß wie überprüft man so etwas? Wird jetzt die angegebene Datei in 512 Byte Blöcken kopiert??? Oder wie kann man es anders gestallten?
    MfG
    Dima



  • Pack eine Pause zwischen Lesen und Schreiben und schau dann nach. Entweder innerhalb des Programms andhand der Dateigröße oder eben außerhalb. outfile.flush() wäre wohl noch sinnvoll.



  • Fellhuhn schrieb:

    Pack eine Pause zwischen Lesen und Schreiben und schau dann nach. Entweder innerhalb des Programms andhand der Dateigröße oder eben außerhalb. outfile.flush() wäre wohl noch sinnvoll.

    Hallo,
    1. wann ist der Einsatz von flush() sinnvoll? Denn in dem oberen Bsp. funtioniert es auch ohne. Oder kann es zu fehlern kommen?
    2. Beim einfügen von Pause in der schleife zwischen lesen und schreiben kopiert er mir nur das letzte zeichen einer txt-Datei.
    3. Wenn man für eine Variable 512Byte Speicher reserviert hat und kopiert den Inhalt einer Datei hinein, dann müsste ja die Ausgabedatei ein vielfaches von den 512Byte sein oder??? D.h. wenn ich eine datei kleiner 512Byte kopier dann müsste die ausgangsdatei ja 512Byte haben. Oder nicht???
    Denn im Oberen Bsp. ist es nicht der Fall Eingabedateigröße=Ausgabedateigröße.

    MfG
    dima



  • Sollte das nicht eher so aussehen?

    while(infile.read(buffer, 512))
            outfile.write(buffer, 512);
    

    In einen int passen doch keine 512 Byte.



  • void DateiKopieren(string& inf, string& outf)
    {
    	unsigned char buffer[512];
       fstream infile, outfile;
    	infile.open(inf.c_str(), ios::in | ios::binary);
       outfile.open(outf.c_str(),ios::out | ios:: binary);
       while(infile.read(buffer, sizeof(buffer)))
    		outfile.write(buffer, sizeof(buffer));
       infile.close();
       outfile.close();
    
    }
    

    Also mit dem Code oben werden Datein die Größer sind als 512Byte kopiert.
    Leider schneidet er den letzten unvollständigen Block von 512Byte ab.
    Wie könnte man das ändern, dass das lezte bzw. dateien, die kleiner sind wie 512Byte auch kopiert werden.

    MfG
    Dima



  • void DateiKopieren(const string& inf, const string& outf)
    {
    	char buffer[512];
    	fstream infile, outfile;
    	infile.open(inf.c_str(), ios::in | ios::binary);
    	outfile.open(outf.c_str(),ios::out | ios:: binary);
    
    	while(!infile.eof())
    	{
    		infile.read(buffer, sizeof(buffer));
    		outfile.write(buffer, infile.gcount());
    	}
    	infile.close();
    	outfile.close();
    }
    


  • Das geht 😃
    🙂 Dankeschööööööön an alle. 🙂


Anmelden zum Antworten