2012-12-16 28 views
6

Tôi đang cố gắng .tar.gz một danh sách các tệp từ một thư mục sử dụng SharpZipLib. Vấn đề là không có vấn đề làm thế nào vượt qua các đường dẫn tập tin - kết quả luôn luôn chứa các đường dẫn tập tin - và không chỉ các tập tin bản thân họ. Tôi đang thiếu gì ở đây?Tạo một kho lưu trữ .tar.gz mà không cần cấu trúc thư mục bằng cách sử dụng SharpZipLib

string filesFolder = "c:\\testfolder\\test\\"; 
List<string> filesToZip = new List<string>() { filesFolder +"test1", filesFolder +"test2"}; 

using (FileStream fs = new FileStream(filesFolder +"myGz.tar.gz" , FileMode.Create, FileAccess.Write, FileShare.None)) 
using (Stream gzipStream = new GZipOutputStream(fs)) 
using (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(gzipStream)) 
    { 
     foreach (string filename in filesToZip) 
     { 
     { 
      TarEntry tarEntry = TarEntry.CreateEntryFromFile(filename); 
      tarArchive.WriteEntry(tarEntry, false); 
     } 
     } 
    } 

những gì tôi nhận được là tệp "myGz.tar.gz". Khi tôi cố gắng mở nó với 7.zip - tôi nhận được cấu trúc thư mục đầy đủ trong kho lưu trữ - c: \ testfolder \ test \, và trong đó - "test1", "test".

Làm cách nào để xóa đường dẫn tệp?

Cảm ơn

+0

Điều này có thể hữu ích: http://stackoverflow.com/questions/1350653/c-sharp-sharpziplib-strips-irrelevant-directory-names –

+0

Đó là bởi vì bạn đang nói với nó quá! Tại sao bạn nghĩ nó làm theo cách nào khác? – leppie

+0

Tôi không thấy bất kỳ cách nào khác để thêm vào tar mà không cung cấp cho nó đường dẫn tệp đầy đủ. M Sakher Sawan - cảm ơn! nó hoạt động trên các tệp zip - nhưng tôi không thể tìm thấy ví dụ về paraplel cho các tệp .gz – kiki

Trả lời

2

tôi đã cùng một vấn đề, và tôi figured it out chỉ sau khi tìm thấy câu hỏi này.

Điều quan trọng là đặt thuộc tính Name của tarEntry, trước khi thêm nó vào lưu trữ.

TarEntry tarEntry = TarEntry.CreateEntryFromFile(filename); 
tarEntry.Name = Path.GetFileName(filename); 
tarArchive.WriteEntry(tarEntry, false); 
Các vấn đề liên quan