Frage Wie kann eine Dateigröße Null sein?


Nur etwas, dem ich begegnet bin und mir keine richtige Erklärung einfallen lassen konnte. Wenn ich eine leere * .txt-Datei auf meinem PC erstelle und dann auf seine Größe schaue, wird 0 angezeigt. Aber wie ist das möglich? Ich meine, selbst wenn die Datei selbst leer ist, muss sie trotzdem eine gewisse Größe haben, nur um ihren eigenen Namen zu speichern. Wie kann das erklärt werden? (Nicht Betriebssystemspezifisch)


173
2017-09-15 08:32


Ursprung


der Dateiname zählt nicht in der Datei, so wie es erklärt werden kann. - njzk2
Ich werde an einen Freund in der Schule erinnert, der eine Software geschrieben hat, um Text als Dateinamen zu speichern, um die Festplattenquote zu umgehen. - slebetman
@ColeJohnson Ich war Praktikantin in den 2000er Jahren in einem meiner Computerlabor, und die Benutzerquote wurde als Summe der Dateigrößen berechnet. So würde das Speichern von Daten als Dateinamen in der Tat um qouta herumkommen. Verdammt, du könntest ein Programm speichern Ordner und es würde nicht gegen Ihre Quote zählen. - Mindwin
@slebetman Dies ist der Punkt, an dem die Grenze zwischen Genie und Wahnsinn verschwimmt. - Pharap
Eine ähnliche Technik wurde bekanntermaßen in einem Kompressionsherausforderung, - Oddthinking


Antworten:


Es ist möglich, weil es wirklich keine Datei gibt. Es gibt nur einen Verzeichniseintrag mit einem Namen und einem Besitzer. Der Verzeichniseintrag unterscheidet sich logisch von der Datei. Zum Beispiel kann dieselbe Datei mehr als einen Namen in mehr als einem Verzeichnis haben.

Leider wird der Begriff "Datei" nicht immer genau so verstanden. Die Logik für die Dateigröße stammt jedoch aus dem Modell, bei dem ein Verzeichniseintrag eine Datei an ein Verzeichnis anhängt und Dateinamen und zugehörige Metadaten im Verzeichnis gespeichert werden.


201
2017-09-15 08:34



... auch bekannt als Hard Links. - Daniel B
Im Verzeichnis. Wenn sich die gleiche Datei in zwei Verzeichnissen befindet und Sie sie in eine umbenennen, ändert sich das andere Verzeichnis, was überhaupt keinen Sinn ergibt. Und wäre es nicht so, was wäre der Inhalt eines Verzeichnisses ?! - David Schwartz
Auf den meisten UNIX-ähnlichen Betriebssystemen wie FreeBSD und Linux können Sie problemlos die Größe eines Verzeichnisses ermitteln. Befehle wie ls -ld <directory> wird funktionieren. - David Schwartz
Ich weiß nicht, ob dies für die aktuelle Version von NTFS zutrifft, aber frühe Versionen (z. B. auf NT3.x) würden die Daten für sehr kleine Dateien im Verzeichniseintrag speichern. Die Datei würde buchstäblich nicht existieren. - John Rennie
Es ist nicht ganz richtig, dass es keine Datei gibt, es sei denn NTFS unterscheidet sich sehr von anderen Dateisystemen. In einem normalen Unix-Dateisystem würde es einen Inode geben, der die Berechtigungen, Mod-Times und so weiter speichert. Der Verzeichniseintrag bezieht sich immer noch auf diesen Inode. Der einzige Unterschied zwischen einer leeren Datei und einer nicht leeren Datei ist der Zeiger zum Zuweisen von Blöcken. Eine leere Datei weist das Dateisystem-Äquivalent eines NULL-Zeigers für seine Blockzuordnung auf, um anzuzeigen, dass sie keine Datenblöcke enthält. Verzeichniseinträge sind nicht mit Berechtigungen und Mod-Zeiten überfüllt, auch nicht für leere Dateien. zB XFS Inodes sind 256B - Peter Cordes


Die semantische Bedeutung von "Dateigröße" unterscheidet sich von der, die Sie verwenden.

Es gibt viele Dateigrößen, die aussagekräftig sind. Die gebräuchlichste und die, die Sie hier sehen, ist "die Anzahl der Bytes in der Datei". Wenn die Datei eine leere Textdatei ist, kann sie tatsächlich 0 Bytes enthalten. Diese Nummer ist für Programmierer wichtig, weil wir oft eine Datei öffnen müssen, "alle Daten lesen" und sie schließen müssen. Wir müssen wissen, wie viele Datenbytes in der Datei enthalten sind, damit wir vorausplanen können.

Eine andere Bedeutung ergibt sich aus der Art, wie die meisten Dateisysteme Daten speichern. Die meisten Dateisysteme speichern Daten in Blöcken. Zum Beispiel kann das Dateisystem Daten in 64kB-Blöcken speichern, was bedeutet, dass es niemals etwas zuweisen wird, das kein geradzahliges Vielfaches von 64kB ist. Das klingt ineffizient, aber es kann die Buchhaltung viel einfacher machen, und oft einfacher bedeutet schneller.

Eine dritte Bedeutung, an der Sie zerren, ist die tatsächliche Anzahl der Bits, die auf der Festplatte benötigt werden, um das Vorhandensein einer Datei zu beschreiben. Dazu gehören Informationen, die normalerweise getrennt von der Datei gespeichert werden. Zum Beispiel wird in Linux das Konzept des "Dateinamens" im Inode für das Verzeichnis gespeichert, das die Datei enthält (edit: aus Kommentaren, technisch wird das in den Daten des Verzeichnisses gespeichert. Als ich das schrieb, dachte ich an das Kleine -directory case: Daten kleiner als 156 Byte können direkt im Inode gespeichert werden. Dies ist keine allgemein gebräuchliche Bedeutung, da es sehr schwer zu bestimmen ist, ohne dass man das Innere des Dateisystems sehr tief kennen muss. (Haben Sie den Speicherplatz berücksichtigt, der benötigt wird, um alle Berechtigungen für die Datei zu speichern?). Wenn Sie jedoch eine 1.000.000-Byte-Festplatte haben und wissen möchten, wie groß eine Datei auf diese Festplatte passt, ist dies für Sie eine sehr wichtige Bedeutung!


82
2017-09-15 17:41



"im Inode für das Verzeichnis, das die Datei enthält" Meinst du nicht die Daten des Verzeichnisses und nicht seine Inode? Der Inode enthält Dateigrößen und Daten, aber keine Namen ... - Medinoc
@ Medinoc Guter Punkt. Ich dachte an den Inline-Fall, als es die Daten im Inode speicherte, aber ich habe nicht wirklich überprüft, wie viel das passieren könnte! Ich habe eine Bearbeitung hinzugefügt. - Cort Ammon
verbunden Inline-Datenfunktion von ext4 ist dies keineswegs universell für alle Dateisysteme. Dies gilt auch für die Dateien inode, nicht für das Verzeichnis. Sie sind getrennt, Verzeichnisse haben auch eine Inline-Datenfunktion, aber sie sind separate Funktionen. Ein Datei-Inode hat eine feste Größe, zumindest im Fall von ext4, so dass die Datennutzung von Berechtigungen irrelevant ist. Die Festplattennutzung einer Datei hängt stark vom verwendeten Dateisystem ab, der dritte Teil dieser Antwort gilt nur für ext4, soweit ich das beurteilen kann, wird dies nicht klargestellt. - Phizes
Wenn Sie eine 1.000.000-Byte-Festplatte haben, könnte es an der Zeit sein, über ein Upgrade nachzudenken. - nekomatic


Der Dateiname wird irgendwo anders gespeichert.

Auf Ihrer Festplatte befindet sich ein "Dateisystem", einfach eine Methode zur Auswahl, wie Dateinamen und Dateien auf der physischen Festplatte dargestellt und interpretiert werden.

Auf den meisten Windows-Laufwerken verwenden Sie ein Dateisystem namens "NTFS" (New Technology File System), das die Dateinameninformationen in der Master File Table (MFT) getrennt von den Dateiinhalten speichert Wikipedia-Artikel über Master File Table.

Die Datei selbst wird daher eine Länge von 0 Bytes haben, aber ihr Eintrag in der MFT wird noch etwas Platz einnehmen.


53
2017-09-15 21:58



und im Falle von NTFS ist die Größe der von Windows und den meisten Tools gemeldeten Datei tatsächlich die Größe des Hauptstrom der Datei, die wir als Inhalt der Datei wahrnehmen. Die auf der NTFS-Partition gespeicherte Datei kann zusätzlich einige Daten enthalten alternative Datenströmeund haben immer noch die angegebene Größe von 0. Es ist eine nette Dateisystemfunktion, um zu wissen, ob Sie das ganze Bild haben wollen :) - Paweł Bulwan


Das ist eine interessante ontologische Frage ...

Die Datei selbst ist der Inhalt der Datei. Wenn die Datei keinen Inhalt hat, hat sie eine Größe von Null. Der Dateiname ist genauso ein Teil der Datei, wie Ihr eigener Name physisch ein Teil von Ihnen ist (dh es ist nicht).

So wie Ihr Name als Idee in den Köpfen der Leute (und Ihrer eigenen) existiert, die auf das physische Sie verweist / zeigt, existiert der Dateiname in der Verzeichnisstruktur des Dateisystems und verweist auf die Datei.


12
2017-09-16 14:59





(Ein bisschen zu spät zur Antwort ...)

Wie kann eine Datei der Größe Null etwas komplizierter sein als die obigen Antworten? Die Frage ist mit Win7 tagged, aber mit Blick auf andere "einfachere" Dateisysteme wie FETT oder NTFS, kann nützlich sein, da die Konzepte ähnlich sind.

Die Festplatte "weiß" nicht, was eine Datei ist und was ein Verzeichnis ist; Es sind alles Daten in kleinen Blöcken. Das OS unterscheidet zwischen der Bedeutung von Datenblöcken. Die ersten ein spezielles, aber die restlichen Blöcke enthalten entweder Informationen über die Daten (zB: Dateiname, Dateilänge, erster Datenblock, der die Daten enthält) oder die Daten selbst.

Ein Verzeichnis ist eine spezielle "Datei", deren "Daten" das Betriebssystem versteht, ist ein Informationsblock, der Informationen über Dateien enthält, nicht den Inhalt der Dateien. Eine gute Analogie ist eine physische Bibliothek und der Kartenkatalog. Stellen Sie sich die Informationsblöcke als den Kartenkatalog und die Regale als die Datenblöcke vor (der Kartenkatalog befindet sich ebenfalls auf einer regalartigen Struktur).

Wenn Sie eine Datei "erstellen" (z. B. mit UNIX touch Befehl), erzeugt das OS zuerst einen Eintrag in einem Informationsblock (Verzeichnis) mit folgendem:

  • Name = My_File.txt
  • Länge = 0
  • Startdatenblock = N / A
  • Zusätzliche Informationen (Eigentümer, Berechtigungen, erstellt / aktualisiert / geändert Datum), etc

Nur wenn einige Daten zu "schreiben" sind, wird versucht, einen leeren Datenblock zum Speichern der Daten zu finden. Aber die Datenblöcke kommen in festen Größen (sagen wir 32K), die für das Laufwerk und das Betriebssystem geeignet sind. Wenn Sie nur "Hello" schreiben, ist der größte Teil des Blocks "leer" (eigentlich keine Nullen, sondern Müll von dem, was vorher da war), also aktualisiert die Tabelle auch die Größe auf die Länge (sagen wir 5 Zeichen + Ende von Datei), damit Sie nicht die schlechten Sachen bekommen.

Wenn Sie die "Datei" auf eine Länge> Blockgröße aktualisieren, schreibt das Betriebssystem die Daten in den neuen Block und aktualisiert einen Datenblock, um zu sagen, dass die Datei nach dem nächsten Block fortfährt (usw.) und die Länge aktualisiert wird neue Länge (Details abweichen).

Am Ende steht eine Sammlung von Informationsdatenblöcken (Verzeichnisse oder Listen) mit Informationen über die Ketten von Datenblöcken (Dateiinhalt).

Logischerweise erklärt dies auch, warum eine Datei, die sich auf demselben Dateisystem bewegt, schnell blinkt, während eine Kopie eine lange Zeit benötigt. Das Betriebssystem muss nur 2 Verzeichnisblöcke bearbeiten, um den Eintrag aus einem Verzeichnis (Informationsdatenblock) zu entfernen und zu einem anderen Verzeichnis hinzuzufügen. Löschen einer Datei: Entfernen Sie einfach den Eintrag im Verzeichnisblock und geben Sie die Dateidatenblöcke frei, die neu zugeordnet werden sollen.

ps: Nur weil der Kartenkatalog einen Eintrag für ein Buch enthält, heißt das nicht, dass er im Regal steht (ausgecheckt oder vielleicht verloren); Dateigröße 0.

pps: Ein falsch platziertes Buch innerhalb der Bibliothek beinhaltet eine Suchbibliothek, oder in Computerbegriffen: chkdsk oder repair disk!

Ein besseres Verständnis kann man durch das Lesen von UNIX-Inodes oder durch die Tatsache gewinnen, wie Versionskontrollsysteme (ClearCase, TFS, Git usw.) nicht nur Dateien und Verzeichnisse verwalten, sondern auch Versionen von Dateien und sogar Versionen von Verzeichnissen. In den meisten Fällen wird alles in einer Datenbank gespeichert und dem Benutzer als klassische Verzeichnisstruktur und Dateien angezeigt!


7
2017-09-16 09:55





Wir haben hier einige ausgezeichnete Antworten - ich würde nur die Bildversion hinzufügen (tausend Worte und all das.)

So sieht eine meiner NTFS-formatierten Festplatten aus, wenn Sie sie mit einem Defragmentierungstool visualisieren. Das MFT (Stammdateitabelle) ist violett dargestellt:

enter image description here

Dieses kleine violette Quadrat beschreibt die Liste der Dateien in meiner HD. Grob gesagt, ist es für eine NTFS-Platte, was das Inhaltsverzeichnis für ein Buch ist; anstelle von Seiten zeigt es auf ihren physischen Speicherort auf dem Rest der Festplatte1.

Eine Datei mit einer Größe von 0 Byte kann als Inhaltsverzeichnis angezeigt werden, das auf keine Seite verweist:

enter image description here

Der Eintrag ist dort aufgeführt, aber da keine Seite angegeben ist, können wir davon ausgehen, dass der Inhalt nicht existiert.

1 - Sicher, es ist ein bisschen komplizierter als das; aber Punkte wie Sektorkarten, Spiegel-MFTs usw. sind außerhalb des Umfangs dieser Fragen.


4
2017-09-24 00:05





Dateisystemspeicher viel Informationen über eine Datei wie Dateiname, Dateigröße, Erstellungszeit, Zugriffszeit, modifizierte Zeit, erstellte Benutzer-, Benutzer- und Gruppenberechtigungen, Fragmente, Zeiger auf Cluster, die die Datei speichern, Hard / Soft-Links, Attribute ... Diese werden gerufen Dateimetadaten. Warum zählen Sie diese Metadaten in die Dateigröße, wenn die Benutzer sich nicht um sie kümmern (müssen) und sie nicht kennen? Sie kümmern sich nur wirklich um den Dateiinhalt

Außerdem Jedes Dateisystem speichert verschiedene Arten von Metadaten die unterschiedlich viel Speicherplatz auf der Festplatte belegen. Zum Beispiel unterscheiden sich POSIX-Berechtigungen sehr von der NTFS-Berechtigung, und es gibt auch inode Nummern in POSIX, die nicht unter Windows existieren. Sogar POSIX-Dateisysteme unterscheiden sich sehr, wie ext3 mit 32-Bit-Blockadresse, ext4 mit 48-Bit, Btrfs mit 64-Bit und ZFS mit 128-Bit-Adresse. Wie werden Sie diese Metadaten in Dateigröße zählen?

Nehmen Sie ein anderes Beispiel mit einer 100-Byte-Datei, deren Metadaten im aktuellen Dateisystem 56 Byte belegen. Wir kopieren die Datei in ein anderes Dateisystem und benötigen jetzt 128 Byte Metadaten. Aber das Dateiinhalte sind genau gleich, die Anzahl der Bytes in den Dateien sind auch gleich. Das bedeutet, dass die Dateigröße auf einem System 156 Byte und auf einem anderen 228 Byte beträgt verwirrend und kontraintuitiv.


3
2017-09-16 09:41





Eine Dateigröße von 0, ist ähnlich zu sagen: Ich habe ein Papier mit 5 Wörter darauf. Und auf einem anderen Papier hat es 0 Wörter darauf. Damit 0 ist durchaus möglich.

Die Metadaten der Datei (Erstellungsdatumszeitpunkt, Datum des letzten Änderungsdatums, Dateieigner, Berechtigungen) werden alle anderswo gespeichert und nicht als Teil der Dateigröße enthalten.


1
2017-12-25 04:37





Verstehen Sie es auf einfache Weise ... wenn Sie eine Datei erstellen ... wird ein Verzeichniseintrag generiert, der als Zeiger auf den Speicherort der Datei fungiert, die durch den von Ihnen angegebenen Dateinamen identifiziert wird. Die Größe des Verzeichnisses erhöht sich, wenn Sie mehr und mehr Zeiger erstellen oder Dateien sagen. Die Dateigröße wird jedoch nur dann erhöht, wenn Sie bestimmte Daten an der angegebenen Stelle, d. H. In der Datei selbst, ablegen. Bis dahin wird die Größe Null sein. :)


0
2017-09-16 18:55



Das ist wirklich ein Kommentar - keine Antwort - und wiederholt nur, was andere gesagt haben. - JakeGould