Gibt es eine Funktion,die prüft ob eine Datei leer ist bzw existiert?
-
Hallo Leute!
Ich brauche eine C++-Fkt, die Prüft ob eine Datei leer ist. Gibts sowas???
Wäre dankbar für antworten.
-
wofür brauchst du das denn?
also ab wann ist eine datei leer?
Nur, wenn sie genau 0 Byte auf der hdd belegt oder auch, wenn sie nur leerzeichen/zeilenumbrüche/tabs enthält?bb
-
Ich will prüfen ob eine Datei existiert oder falls sie existiert, ob sie ganz leer ist und erst dann soll mein Programm starten
-
ich denke zwar, dass das keinen unterschied machen sollte, aber:
http://www.cplusplus.com/reference/iostream/istream/tellg/
damit kannst du die länge bestimmen - also erstell einfach eine datei (http://www.cplusplus.com/reference/iostream/ifstream/ifstream/)
erstellen mit dem flag, was eine datei erstellt, wenn keine mit dem namen vorhanden ist. (...::ate)
dann ein seekg() auf end und dann das tellg und dann nen seekg() auf begin
wenn die länge -1 ist, dann gabs nen fehler - keine ahnung, was das fürn fehler gewesen sein sollte^^
wenn dann die länge gleich 0 ist, ist die datei leer (bzw es war davor noch keine da und er hat jz trotzdem ne leere datei)
und ansonsten steht was drin
kannst dir auch das erste seekg() ersparen, wenn du statt des ate`s ein app nimmst...
bb
-
Ehrlich gesagt versteh ich es nicht so ganz.
-
versuche die Datei lesend zu öffnen. Wenns nicht geht, ist die Datei nicht da.
-
#include <fstream> int main() { std::ifstream file("datei.endung", std::ios_base::in | std::ios_base::ate); if(file.tellg() == 0) { //leer oder war davor nicht da } file.seekg(std::ios_base::beg); //ist nicht leer und ganz normal zu benutzen }hoffe ich ;o)
bb
-
... nunja. Ich denke, das "ist nicht da" ist nicht unbedingt identisch mit "kann ich nicht öffnen". Da könnten einem auch Berechtigungen, konkurrierende Zugriffe, korrupte Files und alles mögliche Andere in die Quere kommen.
Trotzdem ist der Kriterium "Wenn ich sie nicht öffnen kann ..." wohl für die allermeistens Fälle ausreichend (statt "Wenn sie nicht da ist ...").
Gruß,
Simon2.
-
-Alex- schrieb:
Hallo Leute!
Ich brauche eine C++-Fkt, die Prüft ob eine Datei leer ist. Gibts sowas???
Wäre dankbar für antworten.Verwende den Systemaufruf stat(2). Liefert sie 0, existiert die Datei und die Dateigrösse steht dann in der übergebenen Struktur unter dem Element st_size. Liefert der Aufruf etwas ungleich 0, dann gibt die die errno Variable weitere Informationen, warum es nicht funktioniert hat. Der Fehlercode ENOENT bedeutet dann, dass die Datei nicht existiert.
Der Aufruf ist billiger als die Datei zu öffnen und irgendwelche seek-Operationen zu machen. Manchmal ist es sinnvoll, auf Systemaufrufe zu gehen, statt die C++-Standardbibliothek zu verwenden, die ich normalerweise bevorzuge.
-
tntnet schrieb:
...Manchmal ist es sinnvoll, auf Systemaufrufe zu gehen, ..
Vor allem, wenn man wirklich Systeminformationen haben möchte.
Gruß,
Simon2.