Zeichenweise lesen - Problem



  • Planless schrieb:

    Wenn ich binär lese und schreibe erhalte ich in der Ausgabedatei nur:

    MZ  

    Also klappt leider nicht.
    -.-

    Das ist noch kein Anzeichen dafür, das es nicht klappt.
    Wenn das im Original so drin steht, dann auch in der Kopie, ne.
    Hast du die Dateigrößen verglichen?

    Sollte das Kopieren tatsächlich vor EOF abgebrochen werden,
    dann lass dir strerror(errno), bzw. mit WinApis GetLastError den
    Fehlercode anzeigen.
    http://msdn.microsoft.com/en-us/library/ms680582(VS.85).aspx



  • EOF ist kein Fehler. Eher ein Status der heißt "Hier ist nix mehr".
    Binär mit open() öffen und gut is.



  • Scheppertreiber schrieb:

    Nee fricky. MZ ist ein Motorrad

    jo, so'ne zweitakt zonen-säge. ich hätte mir fast mal eine geholt, aber die RD350 fand ich dann doch besser.
    🙂



  • Na also, exe ist ein Ostprodukt 😃 😃 😃

    (fahre Dnepr MT11, 2 Stücker und einiges in der Scheune)



  • Scheppertreiber schrieb:

    (fahre Dnepr MT11, 2 Stücker und einiges in der Scheune)

    zwei stück? eine wiegt doch schon für vier. *fg*
    🙂



  • Habe es jetzt mal mit open() probiert aber in der Ausgabe Datei sind 0 Bytes.
    -.-

    int read_file(char *file) {
       int in,out;
       char puffer[1024];
    
         in = open("Test.exe",O_RDONLY|O_BINARY);
    
    	   if(in == -1) {
    		   printf("Error : Konnte Datei nicht öffnen\n");
    		   return 1;
    	   }
    
    	  out = open("result.exe",O_WRONLY|O_CREAT);
    	     if(out == -1) {
    		   printf("Error : Konnte Datei nicht oeffnen\n");
    		   return 1;
    		 }
    
    		 while((read(in,puffer,1024)) == 0) {
    		    write(out,puffer,strlen(puffer));
    		 }
    		 close(in);
    		 close(out);
    }
    

    Habe noch nie mit open() etc. gearbeitet.
    Was ist verkehrt?



  • ;fricky schrieb:

    eine wiegt doch schon für vier. *fg* 🙂

    Ich auch - hehe 😃

    Hi Planloser,

    es wird doch einen Grund haben, daß Du die Datei binär liest.

    while((read(in,puffer,1024)) == 0) {
                write(out,puffer,strlen(puffer));
    }
    

    Schau doch mal, was Dir read() zurückgibt - Richtig, die Anzahl der
    gelesenen Zeichen (an dieser Stelle ein dreifach frühliches "rtfm").

    Als, wenn, dann so:

    while(( cnt = read(in,puffer,1024)) != 0) {
                write(out,puffer,cnt);
    }
    


  • Ah danke.
    Also die Orginal Exe Datei hat eine größe von 319kb.
    Die "Kopie" nur 63,3kb. Die Kopie lässt sich auch nicht starten. Also würde ich mal sagen das am Code immernoch was verkehrt ist oder?



  • write() gibt Dir, genauso wie read(), die Anzahl Zeichen zurück.
    Schreib Dir jeder read/write mal auf die Console oder poste den
    kompletten Code.



  • Also schon beim 2 Schleifen durchgang gibt write() -1 zurück.
    Mehr Code habe ich eigentlich auch nicht habe in der main() nur noch en Menü.



  • Scheppertreiber schrieb:

    EOF ist kein Fehler. Eher ein Status der heißt "Hier ist nix mehr".
    Binär mit open() öffen und gut is.

    Big Brother schrieb:

    Sollte das Kopieren tatsächlich vor EOF abgebrochen werden,
    dann lass dir strerror(errno), bzw. mit WinApis GetLastError den
    Fehlercode anzeigen.

    @Planless
    ich vermute mal, du hast bei der ersten Version

    char c;
    

    statt

    int c;
    

    deklariert. Das wäre ein Grund warum vor EOF abgebrochen wird. Wenn du int c; deklarierst, funzt das, ansonsten ist dein Compiler puddepäng.

    Gruß,
    B.B.



  • Big Brother hattest recht.
    Also mit fopen() etc. geht es jetzt.
    Nur warum geht es nicht mit open() etc.?


Anmelden zum Antworten