Heim >Backend-Entwicklung >Golang >## Wie kopiert man Dateien mit geringer Dichte, ohne sie in Go zu erweitern?
Beim Kopieren von spärlichen Dateien mit io.Copy() werden sie oft größer Am Ziel nimmt die Größe dramatisch zu.
io.Copy() überträgt Rohbytes, was das Vorhandensein von Lücken in einer Sparse-Datei maskiert – die Bereiche, in denen sich keine Daten befinden tatsächlich wohnt. Auf diese Informationen kann nicht über Standard-Systemaufrufe wie read(2) zugegriffen werden. Daher ist io.Copy() nicht in der Lage, die Spärlichkeit von Dateien beizubehalten.
Um dieses Problem zu lösen, müssen wir uns mit dem Syscall-Paket und der manuellen Handhabung eingehender befassen. Lseek(2)-Systemaufrufe mit speziellen SEEK_HOLE- und SEEK_DATA-Werten können verwendet werden, um Lücken in Dateien zu manipulieren.
Wenn Sie die Dichte einer Datei während der Übertragung beibehalten möchten, ist die Situation komplizierter. Fallocate(2) kann verwendet werden, um die Erstellung von Lücken in unterstützten Dateisystemen zu versuchen. Allerdings fehlt einigen Dateisystemen von Natur aus die Lückenunterstützung, wie etwa die FAT-Familie.
Das obige ist der detaillierte Inhalt von## Wie kopiert man Dateien mit geringer Dichte, ohne sie in Go zu erweitern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!