Wie kann ich feststellen, ob eine Datei leer ist?

8

Wie kann ich feststellen, ob eine Datei leer ist? Die Datei wird von einem C-Programm geöffnet, das auf der Windows-Plattform ausgeführt wird. Ich möchte eine Datei im Append-Modus öffnen und, wenn sie leer ist, zuerst eine Kopfzeile drucken.

%Vor%

Ich habe ftell erwartet, um die aktuelle Dateigröße zurückzugeben, wenn die Datei nicht leer war, was passiert, weil der obige Code geloopt ist.

Jedoch gibt ftell immer 0 zurück und der Header wird mehrmals gedruckt.

Ich weiß, ich könnte fopen it mit r und fseek / ftell / fclose verwenden und dann fopen es wieder mit a+ , aber ich denke, es ist möglich, dies zu tun, ohne zu öffnen und schließen Sie die Datei mehrmals.

    
Benoit Duffez 13.06.2012, 13:06
quelle

3 Antworten

6

Wenn fopen eine Datei im Append-Modus enthält, befindet sich der Dateizeiger anfänglich am Anfang der Datei. Sobald Sie etwas schreiben oder das Skript fseek verwenden, geht es ans Ende.

Ich musste nur fseek(report_csv, 0, SEEK_END); vor meinem if (!ftell(report_csv)) hinzufügen.

Lassen Sie uns das überprüfen.
Code :

%Vor%

Ausgabe :

%Vor%     
Benoit Duffez 13.06.2012, 13:41
quelle
2

Beim Öffnen einer Datei mit fopen im Modus a+ werden alle Schreibvorgänge am Ende der Datei ausgeführt. Sie können den internen Zeiger zum Lesen an eine beliebige Stelle in der Datei verschieben, aber durch Schreibvorgänge wird er wieder an das Ende der Datei verschoben. Die anfängliche Zeigerposition zum Lesen befindet sich am Anfang der Datei.

Sie müssen also fseek(pFile, 0, SEEK_END) auf Ihrem FILE -Zeiger aufrufen.

    
Alexandru C. 13.06.2012 13:50
quelle
1

Sie können _stat() aufrufen und erhalten den Wert st_size in struct _stat (Sie müssen die Datei nicht öffnen).
Deklariert in sys/types.h gefolgt von sys/stat.h
Ich kenne Windows-Programmierung nicht, aber es kann Ihnen helfen: Ссылка

    
André A. G. Scotá 13.06.2012 13:34
quelle

Tags und Links