如何在vb.net中解码zip文件并保存它?
如何在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
我找不到解决方案。
如何在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")