Проблема при сжатии файла с использованием vb.net - PullRequest
0 голосов
/ 04 января 2011

У меня есть файл типа «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 Ответ

3 голосов
/ 04 января 2011

GZipStream сжимает поток байтов, это не более того. Он не встраивает информацию о файле в поток, поэтому вам нужно где-то его вставить.

Самый простой способ восстановить имя файла - присвоить ему исходное имя, например. Sample.bak.zip.

Если это не сработает, вы можете использовать SharpZipLib ( сэмплов здесь ), который выполняет встраивание информации о файле для вас.

Если вы не хотите этого делать, вы можете либо создать свой собственный формат файла и внедрить информацию о файле, либо вы можете попробовать и реализовать стандартный формат gzip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...