[C] fclose(file) dauert lang, warum?

Du kannst schauen wie viele Bytes dein programm schon in die Datei geschrieben hat.

Müsste bei dir so aussehen
C++:
printf("Geschriebene Bytes: %i\n", ftell(f));

Dann schauste einfach ob die Größe mit der Größe der Quelldatei übereinstimmt

EDIT.: ftell gibt die Position des Pointer in der übergebenen Datei an NICHT automatisch die Dateigröße!!
 
Zuletzt bearbeitet von einem Moderator:
Ah, schon klar.

Der Pointer steht am Ende der Datei, also ftell(f) liefert die Größe der Zieldatei.

Trotzdem habe ich eine Verzögerung. In letzter Zeit variiert die Geschwindigkeit etwas, letztens über 40mb/s, ist schon klar, dass dieser Durchsatz nicht über USB 2.0 geht.
Ich glaube ich schließe das Thema ab, schneller gehts wohl nicht.

Danke für die Hilfe!

Dachte auch noch nach, dass evtl. Windows 7 hier reinpfuscht. Denn wenn ich eine Datei kopiere, und die Datei laut Anzeige schon fertig ist, dauert es dennoch ein bischen bis die Datei entgültig angezeigt wird und das Kopieren-Fenster verschwindet.

mfg.
 
Ich hab eben nochma deinen Source oben überflogen.

Müsste es statt dem hier:
C++:
if(flushcount >= 16384) //alle ~8mb
{
  fflush(f);
  flushcount=0;
}

nicht so aussehen****?
C++:
if(flushcount * DAT_RECV_BUFFLEN>=16384) //alle ~8mb
{
  fflush(f);
  flushcount=0;
}

Du empfängst doch außer beim letzten mal immer 512Byte pro receive oder nicht?
Und hast du mal geschaut was fclose() dir zurückgibt?
 
Zuletzt bearbeitet von einem Moderator:
Stimmt schon so, denn (16384*512=8.388.608), dh. jede 16384 mal recv macht er ein fflush(). Bei deiner Funktion würde er alle 32 mal recv fflush() aufrufen, das entspricht nur ~16kbyte.

fclose() gibt den Wert 0 zurück. Was bedeutet, dass der Stream erfolgreich geschlossen wurde.

mfg. Poseidon
 
Ach ja logisch. Ich hab wohl deine Methode mit der Methode die ich verwenden würde vermischt^^
Wegen dem fclose() fällt mir so ohne weiteres jetz aber auch nix mehr ein.
 
Zurück