如何在vb.net中解码zip文件并保存它?

11 浏览
0 Comments

如何在vb.net中解码zip文件并保存它?

我正在创建一个项目,其中一个zip文件被base64编码,然后解码并保存,但是当我解压缩文件时,会出现损坏的文件错误。

Dim zip As New Xs_UnZipFilesCompat
''编码()
Dim base64encoded As String
Using r As StreamReader = New StreamReader(File.OpenRead("E:\zip_test.zip"))
    Dim data As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(r.ReadToEnd())
    base64encoded = System.Convert.ToBase64String(data)
    r.Dispose()
End Using
'解码 --> 写回
Using w As StreamWriter = New StreamWriter(File.Create("e:\stcRepositorio\Entrena_To_Art\Enviar\testDEco.zip"))
    Dim data As Byte() = System.Convert.FromBase64String(base64encoded)
    w.Write(System.Text.ASCIIEncoding.ASCII.GetString(data))
    w.Dispose()
End Using

我找不到解决方案。

0
0 Comments

如何在vb.net中解码zip文件并保存它?

在解码zip文件并保存它的过程中,出现了编码不正确的问题。具体来说,出现了以下问题:

Dim data As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(r.ReadToEnd())

绝对不能将以*.zip扩展名的文件读取为ASCII字符。请将其替换为以下代码:

Dim data As Byte() = System.IO.File.ReadAllBytes(fileName)

这也意味着我们不再需要StreamReader,所以最终的代码如下:

Public Function Encode(fileName As String) As String
    Return Convert.ToBase64String(IO.File.ReadAllBytes(fileName))
End Function

然后解码的代码如下:

Public Sub Decode(fileName As String, base64Data As String)
    IO.File.WriteAllBytes(fileName, Convert.FromBase64String(base64Data))
End Sub

我们可以这样调用它们:

Dim base64encoded As String = Encode("E:\zip_test.zip")
Decode("e:\stcRepositorio\Entrena_To_Art\Enviar\testDEco.zip", base64encoded)

或者我们可以不使用方法,直接写成这样的代码:

Dim base64encoded As String = Convert.ToBase64String(IO.File.ReadAllBytes("E:\zip_test.zip"))
IO.File.WriteAllBytes("e:\stcRepositorio\Entrena_To_Art\Enviar\testDEco.zip", Convert.FromBase64String(base64encoded))

但是最简单的方法似乎是这样的:

IO.File.Copy("E:\zip_test.zip", "e:\stcRepositorio\Entrena_To_Art\Enviar\testDEco.zip")

0