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.
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 :
Ausgabe :
%Vor% 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.
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: Ссылка