使用vb.net压缩文件时出现问题

时间:2011-01-04 14:50:24

标签: vb.net compression

我有File Like“Sample.bak”,当我将其压缩为“Sample.zip”时,我丢失了zip文件中的文件扩展名,我的意思是当我打开压缩文件时,我发现“Sample”没有任何扩展名。

我使用此代码:

 Dim name As String = Path.GetFileName(filePath).Replace(".Bak", "")
 Dim source() As Byte = System.IO.File.ReadAllBytes(filePath)
 Dim compressed() As Byte = ConvertToByteArray(source)
 System.IO.File.WriteAllBytes(destination & name & ".Bak" & ".zip", compressed)

或使用此代码:

Public Sub cmdCompressFile(ByVal FileName As String)

    'Stream object that reads file contents
    Dim streamObj As Stream = New StreamReader(FileName).BaseStream

    'Allocate space in buffer according to the length of the file read
    Dim buffer(streamObj.Length) As Byte

    'Fill buffer
    streamObj.Read(buffer, 0, buffer.Length)
    streamObj.Close()

    'File Stream object used to change the extension of a file
    Dim compFile As System.IO.FileStream = File.Create(Path.ChangeExtension(FileName, "zip"))

    'GZip object that compress the file
    Dim zipStreamObj As New GZipStream(compFile, CompressionMode.Compress)

    'Write to the Stream object from the buffer
    zipStreamObj.Write(buffer, 0, buffer.Length)
    zipStreamObj.Close()

End Sub

请我压缩文件而不丢失压缩文件中的文件扩展名。

谢谢,

1 个答案:

答案 0 :(得分:3)

GZipStream压缩一个字节流,它不会比这更多。它没有在流中嵌入文件信息,因此您需要将其嵌入到某个位置。

恢复文件名的最简单方法是使用原始名称命名,例如Sample.bak.zip。

如果这不起作用,可以使用SharpZipLibsamples here)为您嵌入文件信息。

如果您不想使用其中任何一种,您可以创建自己的文件格式并嵌入文件信息,也可以尝试实施standard gzip format