Baca kandungan fail tar tanpa mengekstrak ke cakera

王林
Lepaskan: 2024-02-09 22:27:21
ke hadapan
673 orang telah melayarinya

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

editor php Strawberry akan memperkenalkan anda kepada teknik yang sangat praktikal hari ini - membaca kandungan fail tar tanpa menyahmampatkannya ke cakera. Semasa proses pembangunan, kita selalunya perlu memproses fail tar, tetapi menyahmampatnya ke cakera dan kemudian membacanya akan mengambil banyak ruang dan masa cakera. Dengan menggunakan sambungan Archive_Tar PHP, kami boleh terus membaca kandungan fail tar, mengelakkan proses penyahmampatan yang membosankan, dan meningkatkan kecekapan kod. Seterusnya, mari belajar tentang langkah-langkah khusus!

Kandungan soalan

Saya telah dapat mengulangi fail dalam fail tar, tetapi saya tidak pernah memikirkan cara membaca kandungan fail ini sebagai rentetan. Saya ingin tahu cara mencetak kandungan fail sebagai rentetan?

Ini kod saya

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)
    }
}
Salin selepas log masuk

Penyelesaian

Hanya gunakan tar.reader sebagai io.reader untuk setiap fail yang anda ingin baca.

tr := tar.newreader(r)

// get the next file entry 
h, _ := tr.next()
Salin selepas log masuk

Jika anda memerlukan keseluruhan fail sebagai rentetan:

// 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)
Salin selepas log masuk

Jika anda perlu membaca baris demi baris, ini lebih baik:

// 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
}
Salin selepas log masuk

Atas ialah kandungan terperinci Baca kandungan fail tar tanpa mengekstrak ke cakera. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!