Heim  >  Artikel  >  Backend-Entwicklung  >  Lesen Sie den Inhalt einer TAR-Datei, ohne sie auf die Festplatte zu extrahieren

Lesen Sie den Inhalt einer TAR-Datei, ohne sie auf die Festplatte zu extrahieren

王林
王林nach vorne
2024-02-09 22:27:21673Durchsuche

读取 tar 文件的内容而不解压到磁盘

php-Editor Strawberry stellt Ihnen heute eine sehr praktische Technik vor – das Lesen des Inhalts einer TAR-Datei, ohne sie auf die Festplatte zu dekomprimieren. Während des Entwicklungsprozesses müssen wir häufig TAR-Dateien verarbeiten, aber das Dekomprimieren auf die Festplatte und das anschließende Lesen nimmt viel Speicherplatz und Zeit in Anspruch. Durch die Verwendung der Archive_Tar-Erweiterung von PHP können wir den Inhalt der TAR-Datei direkt lesen, den mühsamen Prozess der Dekomprimierung vermeiden und die Effizienz des Codes verbessern. Als Nächstes lernen wir die einzelnen Schritte kennen!

Frageninhalt

Ich konnte die Dateien in einer TAR-Datei durchlaufen, habe aber nie herausgefunden, wie ich den Inhalt dieser Dateien als Zeichenfolgen lesen kann. Ich möchte wissen, wie man den Inhalt einer Datei als Zeichenfolge druckt.

Das ist mein Code

package main

import (
    "archive/tar"
    "fmt"
    "io"
    "log"
    "os"
    "bytes"
    "compress/gzip"
)

func main() {
    file, err := os.Open("testtar.tar.gz")

    archive, err := gzip.NewReader(file)

    if err != nil {
        fmt.Println("There is a problem with os.Open")
    }
    tr := tar.NewReader(archive)

    for {
        hdr, err := tr.Next()
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatal(err)
        }

        fmt.Printf("Contents of %s:\n", hdr.Name)
    }
}

Workaround

Verwenden Sie einfach tar.reader als io.reader für jede Datei, die Sie lesen möchten.

tr := tar.newreader(r)

// get the next file entry 
h, _ := tr.next()

Wenn Sie die gesamte Datei als String benötigen:

// read the complete content of the file h.name into the bs []byte
bs, _ := ioutil.readall(tr)

// convert the []byte to a string
s := string(bs)

Wenn Sie Zeile für Zeile lesen müssen, ist dies besser:

// create a Scanner for reading line by line
s := bufio.NewScanner(tr)

// line reading loop
for s.Scan() {

  // read the current last read line of text
  l := s.Text()

  // ...and do something with l

}

// you should check for error at this point
if s.Err() != nil {
  // handle it
}

Das obige ist der detaillierte Inhalt vonLesen Sie den Inhalt einer TAR-Datei, ohne sie auf die Festplatte zu extrahieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen