2011-10-14 38 views
6

Tôi đang sử dụng mã sau để nén tệp và nó hoạt động tốt nhưng khi tôi giải nén với WinRar tôi nhận được tên tệp gốc mà không có phần mở rộng, bất kỳ đầu mối nào nếu tên tệp là myReport.xls khi tôi giải nén chỉ myReport?GZipStream hoạt động nhưng phần mở rộng bị mất

using (var fs = new FileStream(fileName, FileMode.Open)) 
{ 
    byte[] input = new byte[fs.Length]; 
    fs.Read(input, 0, input.Length); 
    fs.Close(); 

    using (var fsOutput = new FileStream(zipName, FileMode.Create, FileAccess.Write)) 
    using(var zip = new GZipStream(fsOutput, CompressionMode.Compress)) 
    { 
     zip.Write(input, 0, input.Length); 
     zip.Close(); 
     fsOutput.Close(); 
    } 
} 
+1

AFAIK GZip không có ý tưởng về các tập tin hoặc thư mục ... OTOH bưu điện là rất khác so với vì nó có tất cả bao gồm tập tin này thuộc tính, vv được xây dựng trong ... có lẽ bạn muốn sử dụng một thư viện Zip? – Yahia

+0

IOW, GZip là định dạng nén, trong khi ZIP là định dạng nén được nén. (TAR sẽ là một ví dụ về định dạng lưu trữ.) –

Trả lời

12

GZip chỉ nén một tệp - mà không biết tên. Do đó nếu bạn nén tệp myReport.xls, bạn nên đặt tên là myReport.xls.gz. Khi giải nén, đuôi tệp cuối cùng sẽ bị xóa để bạn kết thúc với tên tệp gốc.

Đó là cách của nó như thế nào nó được sử dụng trong Unix/Linux cho các lứa tuổi ...

+0

Cảm ơn, đây là vấn đề, bây giờ được giải quyết bằng cách đơn giản gắn thêm phần mở rộng thay vì thay thế nó bằng .zip. –

2

Thực sự rất kỳ lạ. Một tìm kiếm ngắn đã đưa ra những điều sau đây:

http://dotnetzip.codeplex.com/discussions/268293

nào nói rằng GZipStream không có cách nào biết tên của dòng đang được viết, và đề nghị bạn thiết lập FileName sở hữu trực tiếp.

Hy vọng điều đó sẽ hữu ích.

+0

không có nó không hoạt động vì đối tượng zip không có thuộc tính Tên hoặc Tên tệp để gán. Đã thử với .NET 3.5 và .NET 4 nhưng không có sự khác biệt ... :( –

+0

@Davide Piras Nhưng nếu bạn sử dụng DotNetZip nó có một phương thức 'AddFile' - điều này lấy tên tệp và lưu trữ nó ... GZip là một thứ khác với ZIP mặc dù các tên khá giống nhau ... – Yahia

Các vấn đề liên quan