读取和编辑gzip文件的内容?



我正在尝试读取和编辑gzip文件中的文件。我可以对.zip文件执行此操作,但在尝试读取.gzip文件时出现错误。到目前为止,搜索结果只讨论压缩或解压缩.gzip文件。如果是相对的,那么.gzip文件(根据文件属性)实际上有一个"扩展。我需要在其中编辑的文件没有任何扩展名。

Using archive As ZipArchive = Compression.ZipFile.Open(Path.Combine(SelectedWorld, "level.dat"), ZipArchiveMode.Update)
Dim entry As ZipArchiveEntry = archive.GetEntry("level")
Dim s As String = ""
Using sr As New StreamReader(entry.Open())
s = sr.ReadToEnd()
End Using
Dim M As Match = Regex.Match(s, "LevelName")
If M.Success Then
MsgBox(M.Value)
'edit word after "LevelName"  <<I'm going to need help with this too.
End If
End Using

以上代码抛出以下错误:

先。InvalidDataException: '找不到中央目录记录的结尾。'

尝试以下操作似乎没有正确的东西来读取/修改文件。

Using archive As IO.Compression.GZipStream = IO.Compression.GZipStream

我几乎没有找到处理这类文件的其他方法。如有任何帮助,我将不胜感激。

gzip文件不是zip文件。两个完全不同的东西。没有找到中央目录结束记录的错误是只能在zip文件中找到的。

zip文件是一个归档文件,其中存储的文件是独立压缩的。这样就可以删除和添加一些文件,而不必重新压缩其他文件。虽然整个东西需要复制来移动。

gzip文件只存储一个压缩文件。如果你想编辑那一个文件,那么简单地把它压缩,编辑,然后重新压缩。

通常gzip文件中的一个压缩文件本身就是许多文件的未压缩tar归档文件。该文件的扩展名为。tar.gz。如果你想编辑tar文件,同样你可以把它压缩成一个。tar文件,用tar命令编辑它,它可以删除和附加文件,然后重新压缩它。

我使用:

Imports Cyotek.Data.Nbt
NewName = InputBox("Enter New Name")
Dim MyFile As String = Path.Combine(SelectedWorld, "level.dat")
Dim document As NbtDocument = NbtDocument.LoadDocument(MyFile)
Dim root As TagCompound = document.DocumentRoot
root.Name = "Data"
Dim TC As TagCompound = root.GetCompound("Data")
Dim MyTag As Tag = TC.GetTag("LevelName")
MyTag.SetValue(NewName)
document.Save(MyFile)

最新更新