Wie lege ich die Größe einer Datei in c fest? Würde ich das tun, nachdem ich geöffnet habe?
Ja, Sie würden es nach fopen tun - Sie können erstellen, was als eine Sparse-Datei bekannt ist
%Vor%Das sollte eine Datei für X Byte für alles, was Sie brauchen, erstellen, in diesem Fall ist es 1 MB
Überrascht hat das noch niemand gesagt - aber die einfache Antwort ist ftruncate
, mit der man sowohl die Länge einer Datei erhöhen als auch verringern kann. Wenn das Erhöhen der zusätzlichen Dateidaten auf Null-Bytes gesetzt wird.
Beachten Sie, dass Sie, wenn Sie zuvor Daten über die Länge hinaus geschrieben haben, auf die Sie kürzen möchten, zuerst fflush
it benötigen (siehe hier: ftruncate für Datei geöffnet mit fopen ).
ftruncate
info: Ссылка .
Der einzige Weg in plain standard C besteht darin, x
bytes in die Datei zu schreiben, nachdem Sie es im binären Modus geöffnet haben, und selbst dann erlaubt der Standard eine Implementierung um eine beliebige Anzahl von Null-Bytes an das Ende anzuhängen, ohne dass es Ihnen mitgeteilt wird.
Auf der anderen Seite ist es mit POSIX einfach. Rufen Sie einfach ftruncate(fileno(f), x);
Können Sie Ihre Frage klären? Meinst du, du versuchst, eine neue Datei mit einer bestimmten Größe zu erstellen oder hast du eine existierende Datei und willst sie abschneiden?
Das Abschneiden einer vorhandenen Datei ist einfach (in Unix-Varianten sowieso) - verwenden Sie die Funktion truncate ().
Zum Erstellen der neuen Datei - ich bin mir nicht sicher, was genau Sie fragen würden. Möchten Sie eine Datei erstellen, die leer ist, aber eine bestimmte Größe hat? Warum sollten Sie das tun? Die Sparse-Datei-Technik, die andere beschrieben haben (fseek + fputc), erstellt eine "spärliche" Datei, die fast keinen Platz auf der Festplatte beansprucht, aber (wenn Sie sie lesen) alle 0 zurückgibt.
Es gibt eine Reihe von Möglichkeiten, dies zu tun:
1. Nur C / C ++
Sie können den Dateizeiger (mit fseek()
) auf die gewünschte Größe verschieben und alles schreiben. Dadurch wird die Größe der Datei auf den Speicherort des Dateizeigers festgelegt.
Mit diesem Ansatz können Sie jedoch nur die Größe einer Datei erhöhen. Es lässt dich nicht schrumpfen.
2. (Windows)
Sie können die Datei mit CreateFile()
erstellen, dann den Speicherort des Dateizeigers festlegen und SetEndOfFile()
, um die tatsächliche Größe festzulegen.
Diese Methode in Windows kann auch verwendet werden, um die Größe einer Datei zu verkleinern.
3. (Linux)
Ich bin mir nicht sicher, aber es gibt wahrscheinlich etwas in posix, das es anders als nur fseek
+ fwrite
macht.