返回顶部
首页 > 资讯 > 精选 >读取 tar 文件的内容而不解压到磁盘
  • 315
分享到

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

2024-02-10 05:02:09 315人浏览 八月长安
摘要

PHP小编草莓今天将为大家介绍一种非常实用的技巧——读取 tar 文件的内容而不解压到磁盘。在开发过程中,我们经常需要处理 tar 文件,但解压到磁盘后再读取会占用大量的磁盘空间和时间

PHP小编草莓今天将为大家介绍一种非常实用的技巧——读取 tar 文件的内容而不解压到磁盘。在开发过程中,我们经常需要处理 tar 文件,但解压到磁盘后再读取会占用大量的磁盘空间和时间。通过使用php的ArcHive_Tar扩展,我们可以直接读取 tar 文件中的内容,避免解压的繁琐过程,提高代码的效率。接下来,我们一起来了解一下具体的操作步骤吧!

问题内容

我已经能够循环遍历 tar 文件中的文件,但我一直不知道如何将这些文件的内容作为字符串读取。我想知道如何将文件的内容打印为字符串?

这是我的代码

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)
    }
}

解决方法

只需将 tar.reader 用作您要读取的每个文件的 io.reader 即可。

tr := tar.newreader(r)

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

如果您需要将整个文件作为字符串:

// 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)

如果你需要逐行阅读,那么这样会更好:

// 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
}

以上就是读取 tar 文件的内容而不解压到磁盘的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 读取 tar 文件的内容而不解压到磁盘

本文链接: https://lsjlt.com/news/562908.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作