Datei aus- einlesen



  • Moin,
    ich habe eine kleine Frage an euch, bzgl aus Dateien aus und einlesen.
    Ich habe einen Code geschrieben, in welchem ich eine Datei kopieren möchte.
    Anlegen der Datei, Speicherallokierung, usw ist alles fertig.
    Mir geht es eigentlich nur um den Teil, in welchem ich die zu kopierende Datei kopiere.

    /*für buffer wurde Speicherallokiert für die größe bufsize(bufsize = 1MB)*/
    /*kurz: buffer=(char*)malloc(bufsize); */
    /*src = Sourcefile, dst = Destinationfile*/
    
    while(fread(buffer,1,bufsize,src))
        {
            fwrite(buffer,1,bufsize,dst);
        }
    

    Mein Frage nun: Kann es sein, dass ich in dieser Form vielleicht mehr einlese als notwendig?
    Also wenn ich zb. eine File habe, welche 2,05MB(edit:2,5) groß ist, lese ich einmal 1MB und schreibe es in dst, dann nocheinmal 1MB und schreibe es in dst. UND dann lese ich nocheinmal 1MB ODER 0,5MB und schreibe es in dst?
    Ich freue mich auf eure Antworten!

    Liebe Grüße



  • Mehr einlesen als nötig wirst du damit nicht (fread liest nur so viel wie auch Daten verfügbar sind), allerdings schreibst du immer den gesamten Puffer raus, auch wenn fread() weniger gelesen hat. Das heißt, du liest zweimal je 1MB und schreibst sie in die Zieldatei, beim dritten Durchlauf werden nur 50kB gelesen und 1MB (größtenteils noch vom zweiten Durchlauf übrig geblieben) geschrieben.
    (Tip: Die beiden Funktionen liefern dir als Rückgabewert, wieviele Daten sie gelesen/geschrieben haben - das kannst du auch ausnutzen)



  • CStoll schrieb:

    beim dritten Durchlauf werden nur 50kB gelesen und 1MB (größtenteils noch vom zweiten Durchlauf übrig geblieben) geschrieben.

    Danke für die schnelle Antwort!
    Wenn ich das so richtig verstehe müsste das heissen:

    1. Ich lese immer 1 MB und meine dst- Datei wird somit 3MB groß, weil ja 3MB geschrieben werden?
    2. Die ersten 50kB werden gelesen, aber der Rest der mir übrig geblieben
      in meinem puffer wird ebensfalls geschrieben?


  • Dave01 schrieb:

    1. Ich lese immer 1 MB und meine dst- Datei wird somit 3MB groß, weil ja 3MB geschrieben werden?

    Nein, due schreibst immer 1 MB, wieviel du liest, hängt von der Dateigröße ab.

    1. Die ersten 50kB werden gelesen, aber der Rest der mir übrig geblieben
      in meinem puffer wird ebensfalls geschrieben?

    Fast. Der erste Teil des Puffers ist der gerade gelesene Dateiinhalt, der Rest ist Datenmüll (afair undefiniert, aber mit hoher Wahrscheinlichkeit ältere Inhalte der kopierten Datei).



  • ok verstehe 🙂 danke =))


Log in to reply