Genaues Auslesen der Größe einer Datei
-
@Werner: Gab hier schonmal einen Thread, dass bei deinem Snippet Probleme auftreten können. Hab den Link aber leider nicht mehr, müsste "man" suchen

Boost ist wahrscheinlich eine gute Idee.
rüdiger schrieb:
Befehlen? Und warum kein std::remove?
Ist irgendwie sehr C-like im Fehlerfahll eine globale Variable abzufragen. Übernimmt einen Pfad, sollte OS-unabhängig sein, führt aber afaik keine /\-Änderungen durch, man ist also nur am Papier unabhängig und programmiert sich in Probleme.
Keine Ahnung warum überhaupt soviele C-Funktionen in C++ übernommen wurden. Warum gibts keine Date/Time-Klassen in der Standard-Bibliothek? Warum muss ich Dateien über Funktionen löschen, Dateien funktioniert aber über Klassen?
Ich suche verzweifelt nach Hintergrundartikeln zu diesem Debakel, also falls jemand gute Links hat "Warum und wieso" wäre ich sehr dankbar.
MfG SideWinder
-
SideWinder schrieb:
rüdiger schrieb:
Befehlen? Und warum kein std::remove?
Ist irgendwie sehr C-like im Fehlerfahll eine globale Variable abzufragen. Übernimmt einen Pfad, sollte OS-unabhängig sein, führt aber afaik keine /\-Änderungen durch, man ist also nur am Papier unabhängig und programmiert sich in Probleme.
Daher schlägst du eine sehr OS-Abhängige C-API vor, um das Problem zu lösen?
Wie würdest du remove über eine Klasse lösen? Dafür ist doch eine Funktion vollkommen in Ordnung. Auch boost::filesystem macht das mittels einer Funktion.
-
Die Java File Klasse ist eigentlich ganz gut. Hat zwar auch Probleme (es gibt nur setReadOnly und keinen Weg zurück), aber sowas ähnliches in C++ std wäre schon gut.
-
rüdiger schrieb:
Daher schlägst du eine sehr OS-Abhängige C-API vor, um das Problem zu lösen?
Dann springt die Abhängigkeit wenigstens ins Gesicht. Aber Boost scheint mir in dem Fall sogar noch geeigneter zu sein.
rüdiger schrieb:
Wie würdest du remove über eine Klasse lösen? Dafür ist doch eine Funktion vollkommen in Ordnung. Auch boost::filesystem macht das mittels einer Funktion.
Mein Liebling wäre wohl etwas in diese Richtung:
List<File> files = ApplicationDirectory.toFile().find("*.log"); foreach(File file : files) try { file.delete(); } catch (Exception ex) { log(ex); }MfG SideWinder
-
guckstdu schrieb:
Die Java File Klasse ist eigentlich ganz gut. Hat zwar auch Probleme (es gibt nur setReadOnly und keinen Weg zurück), aber sowas ähnliches in C++ std wäre schon gut.
Da finde ich die Lösung von boost::filesystem besser. Ein Pfad ist eben nicht direkt eine Datei...
-
ja, File ist auch für directories da
-
guckstdu schrieb:
ja, File ist auch für directories da
äh lol? Ne, so was möchte ich nicht in std:: haben. Da ist boost::filesystem durchdachter imho
-
rüdiger schrieb:
äh lol? Ne, so was möchte ich nicht in std:: haben. Da ist boost::filesystem durchdachter imho
Ist ja auch sehr abwegig ein Verzeichnis als eine Datei zu behandeln, auf die Idee kommt in der Wirklichkeit fast niemand

MfG SideWinder
-
du musst zwischen dem Inhalt der Datei (dafür gibts streams und so) und der Datei im filessystem unterscheiden. da ist sie fast wie ein verzeichnis und es wäre doch viel umständlicher für verzeichnisse und files unterschiedliche klassen/funktionen, für die gleichen operationen (isHidden, exists,...), zu haben. Man könnte noch eine Vererbungshierarchie einbauen, aber das macht das arbeiten auch nicht einfacher.
-
Hausmeister schrieb:
Ich brauch für mein Programm die EXAKTE grösse einer Bitmap-Datei.
#include <fstream> int main () { using namespace std; ifstream ein ("c:\\bitmap.bmp", ios_base::ate); streamoff len = ein.tellg (); ein.close (); }
-
guckstdu schrieb:
du musst zwischen dem Inhalt der Datei (dafür gibts streams und so) und der Datei im filessystem unterscheiden. da ist sie fast wie ein verzeichnis und es wäre doch viel umständlicher für verzeichnisse und files unterschiedliche klassen/funktionen, für die gleichen operationen (isHidden, exists,...), zu haben. Man könnte noch eine Vererbungshierarchie einbauen, aber das macht das arbeiten auch nicht einfacher.
Wäre der Klassenname Pfad da nicht besser als Datei? Wie gesagt, schau dir boost::filesystem an, das sieht durchdachter aus, als das Java Zeugs.