Gibt es Fallstricke für bestimmte Betriebssysteme, die ich kennen sollte?
Es gibt viele Duplikate ( 1 , 2 , 3 , 4 , 5 ) dieser Frage, die jedoch vor Jahrzehnten beantwortet wurden. Die sehr hoch bewerteten Antworten in vielen dieser Fragen sind heute falsch.
Methoden von anderen (alten QS) auf .sx
stat.h (Wrapper sprintstatf ) verwendet syscall
tellg () gibt pro Definition eine Position zurück, aber nicht unbedingt Bytes . Der Rückgabetyp ist nicht
int
.
c++
c++17
filesize
c++-standard-library
Jonas Stein
quelle
quelle
tellg
Problemen. Das einzige, mit dem es sich zu beschäftigen lohnt, ist das vierte, und das ist nicht großartig, da esofstream
sowohl in der Frage als auch in den Antworten zu viel darüber spricht . Dieser ist weitaus besser darin, die Absicht auszudrücken als die anderen (mit Ausnahme des ersten, der seltsamerweise geschlossen ist).stat(2)
daran? Ist es zu alt geworden oder was?stat(2)
Es ist nicht Teil des Sprachstandards.Antworten:
<filesystem>
(hinzugefügt in C ++ 17) macht dies sehr einfach .Wenn Sie diese Funktion verwenden möchten, um zu entscheiden, wie viele Bytes aus der Datei gelesen werden sollen, beachten Sie, wie in den Kommentaren erwähnt, dass ...
quelle
std::uintmax_t
der man größere Werte halten kann alsstd::size_t
? Wenn nicht, warum nicht verwendenstd::size_t
, was wohl besser erkennbar ist? +1 auf die Antwort, übrigensfile_size
zurückgibt. Sieht für mich auch etwas komisch aus.std::size_t
ist nur erforderlich, um die maximale Größe von Speicherobjekten zu halten. Dateien können erheblich größer sein,size_t
es 32 Bit unduintmax_t
64 Bit.C ++ 17 bringt
std::filesystem
viele Aufgaben in Dateien und Verzeichnissen. Sie können nicht nur schnell die Dateigröße und ihre Attribute abrufen, sondern auch neue Verzeichnisse erstellen, Dateien durchlaufen und mit Pfadobjekten arbeiten.Die neue Bibliothek bietet uns zwei Funktionen, die wir verwenden können:
Die erste Funktion ist eine freie Funktion in
std::filesystem
, die zweite ist eine Methode indirectory_entry
.Jede Methode hat auch eine Überladung, da sie eine Ausnahme auslösen oder einen Fehlercode zurückgeben kann (über einen Ausgabeparameter). Unten finden Sie den Detailcode, in dem alle möglichen Fälle erläutert werden.
quelle