从 Nim 中的 tar.gz 存档中读取文件

2024-03-28

寻找一种使用 Nim 编程语言(版本 0.11.2)从 tar.gz 存档中读取文件的方法。说我有一个档案

/my/path/to/archive.tar.gz

以及该存档中的一个文件

my/path/to/archive/file.txt

我的目标是能够在 Nim 中逐行读取文件的内容。在 Python 中,我可以使用 tarfile 模块来完成此操作。 Nim 中有 libzip 和 zlib 模块,但文档很少,也没有示例。还有 zipfiles 模块,但我不确定它是否能够处理 tar.gz 档案。


在我公司的一个项目中,我们一直在使用以下模块,将 gzip 文件作为流公开:

import
  zlib, streams

type
  GZipStream* = object of StreamObj
    f: GzFile

  GzipStreamRef* = ref GZipStream

proc fsClose(s: Stream) =
  discard gzclose(GZipStreamRef(s).f)

proc fsReadData(s: Stream, buffer: pointer, bufLen: int): int =
  return gzread(GZipStreamRef(s).f, buffer, bufLen)

proc fsAtEnd(s: Stream): bool =
  return gzeof(GZipStreamRef(s).f) != 0

proc newGZipStream*(f: GzFile): GZipStreamRef =
  new result
  result.f = f
  result.closeImpl = fsClose
  result.readDataImpl = fsReadData
  result.atEndImpl = fsAtEnd
  # other methods are nil!

proc newGZipStream*(filename: cstring): GZipStreamRef =
  var gz = gzopen(filename, "r")
  if gz != nil: return newGZipStream(gz)

但您还需要能够读取 tar 标头,以便在未压缩的 gzip 流中找到所需文件的正确位置。您可以包装一些现有的 C 库,例如libtar https://github.com/tklauser/libtar这样做,或者你可以推出自己的实施 https://stackoverflow.com/questions/2505042/how-to-parse-a-tar-file-in-c.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Nim 中的 tar.gz 存档中读取文件 的相关文章

  • 如何有效地使用 python 中的空数据填充文件?

    我需要创建不包含数据的任意大小的文件 它们可能相当大 虽然我可以循环遍历并写入一个空字符 直到达到文件大小 但这看起来很难看 with open filename wb as f what goes here 执行此操作的有效 Python
  • C 中每个块复制一个文件块

    我试图将文件分成 x 个大小为 y 以字节为单位 的块 以便我可以单独复制每个块 我怎样才能做到这一点 尝试使用fread http www manpagez com man 3 fread char buffer ysize fread
  • 如何使用 Objective-C 使文件在 Finder 中不可见

    如果可能的话 我需要使用 Objective C 或使用 C 调用将文件隐藏在查找器中以及聚光灯下 Thanks 您可以使用 chflags path to file UF HIDDEN 隐藏任何文件 See 手动更改标志 2 https
  • 如何在scala的specs2测试中使用jUnit的TemporaryFolder?

    我正在使用 Playframework 编写测试 我需要创建一个临时文件 RunWith classOf JUnitRunner class DiagnosticSpec extends Specification Rule val tem
  • 将图像上传到 spring mvc 中的文件夹

    我尝试将图像上传到我的资源中的文件夹 resouces images demo jpg 但它无法运行 你能帮忙在春天上传到我的资源吗mvc 如果我上传到 C test demo jpg 没关系 我的样本 String filename Fi
  • Java-将文件复制到新文件或现有文件

    我想写一个函数副本 文件f1 文件f2 f1 始终是一个文件 f2 是文件或目录 如果 f2 是一个目录 我想将 f1 复制到该目录 文件名应保持不变 如果f2是一个文件 我想将f1的内容复制到文件f2的末尾 例如 如果 F2 具有内容 2
  • 从相对路径读取文件

    我知道这个问题之前已经被问过 1000 次了 我确实尝试了所有解决方案 Java项目中如何从相对路径读取文件 java io File 找不到指定的路径 https stackoverflow com questions 3844307 h
  • 从jar中读取资源文件

    我想从我的 jar 中读取资源 如下所示 File file file new File getClass getResource file txt toURI BufferedReader reader new BufferedReade
  • 使所有打开的文档选项卡可见

    我想查看我在 Visual Studio 中打开的所有文件或文档 我不希望它们自动隐藏或溢出时隐藏 我怎样才能实现它 执行此操作的内置选项之一 使用固定选项卡 http dailydotnettips com 2016 01 21 pers
  • PHP is_file 和服务器根相对路径

    请问如何使用 is file 和 folder file jpg 这样的路径 谢谢你 如果路径以 开头 则表示该路径是绝对路径 当路径是相对路径时 即不以 开头 则采用相对于 php 脚本的路径 如果您希望 folder file jpg
  • 在 IIS 中启用 JavaScript GZIP 压缩?

    我们希望使用 GZip 压缩庞大的 JavaScript 文件 以加快网站的页面加载速度 我知道这可以通过 IIS 来完成 但我似乎找不到关于如何实现它的简单分步指南 如果有人能向我指出这样的指南 我将非常感激 我以前从未这样做过 所以它需
  • 获取文件的上次访问时间

    我知道使用File对象我们可以获得最后修改时间File i e 文件 lastModified https docs oracle com javase 8 docs api java io File html lastModified 但
  • PHP 一次只能看到 20 个上传文件

    当我尝试一次上传超过 20 个文件时 网络服务器只能看到前 20 个文件 任何其他文件都会被忽略 问题是什么 简单的代码可以尝试
  • 使用文件名将文件一个文件夹复制到 Google 云端硬盘中的另一个文件夹

    我的谷歌云端硬盘帐户中有两个文件夹 文件夹 1 和 文件夹 2 文件夹1 内有多个文件 假设有一个文件名Test txt我想复制Test txt使用 Driveapp 将文件保存到 文件夹 2 我找到了代码 但它仅适用于 文件唯一 ID 我
  • 如何用php将文件内容转换为字节数组

    我想用PHP将上传的文件保存 插入 到数据库中 数据库字段的类型是varbinary 最后 我想要获得 VarBinary 输出 的内容 就像在 C 中读取文件然后将其存储在字节数组中并将数组插入到 VarBinary 中一样 我与数据库的
  • 是否可以防止出现文件对话框?为什么?

    假设我有输入 类型 文件 元素 我想拦截 onclick 事件并防止在不满足条件时出现文件对话框 是否可以 如果不是的话 为什么 Soufiane 的代码要求您的页面上有一个名为 jQuery 的 Javascript 库 如果您没有 您可
  • python 和回文

    我最近写了一个循环的方法 usr share dict words并使用我的返回回文列表ispalindrome x 方法 这是一些代码 有什么问题吗 它只会停止 10 分钟 然后返回文件中所有单词的列表 def reverse a ret
  • 我们可以使用 python 变量来保存整个文件吗?

    假设我们知道所有文件都将被加载到内存中并且我们负担得起 在 python 变量中加载整个文件 可能是二进制文件 有哪些缺点 如果有 或限制 如果有 如果这在技术上是可行的 是否应该避免这种情况 为什么 关于文件大小问题 该解决方案的最大大小
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • 在 Java 中打开现有文件并关闭它。

    是否可以在java中打开一个文件附加数据并关闭多次 例如 psuedocode class variable declaration FileWriter writer1 new FileWriter filename fn1 writer

随机推荐