2012-12-16 13 views
6

Próbuję .tar.gz listę plików z folderu za pomocą SharpZipLib. Problem polega na tym, jak przekazywać ścieżki plików - wynik zawsze zawiera ścieżki plików - i nie tylko pliki same w sobie. Czego tu mi brakuje?Utwórz archiwum .tar.gz bez struktury folderów za pomocą 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); 
     } 
     } 
    } 

to, co otrzymam, to pliki "myGz.tar.gz". Kiedy próbuję otworzyć go przy pomocy 7.zip - otrzymuję pełną strukturę folderów w archiwum - c: \ testfolder \ test \, aw nim - "test1", "test".

Jak usunąć ścieżki plików?

Dzięki

+0

To może być przydatne: http://stackoverflow.com/questions/1350653/c-sharp-sharpziplib-strips-irrelevant-directory-names –

+0

To dlatego, że mówisz to też! Jak myślisz, dlaczego robi to w jakikolwiek inny sposób? – leppie

+0

Nie widziałem innego sposobu dodawania do tar bez podania pełnej ścieżki do pliku. M Sakher Sawan - dziękuję! działa na plikach zip - ale nie mogłem znaleźć przykładu dla plików .gz – kiki

Odpowiedz

2

miałem ten sam problem, a ja zorientowaliśmy się tuż po znalezieniu na to pytanie.

Kluczem jest ustawienie wartości Name dla tarEntry, przed dodaniem jej do archiwum.

TarEntry tarEntry = TarEntry.CreateEntryFromFile(filename); 
tarEntry.Name = Path.GetFileName(filename); 
tarArchive.WriteEntry(tarEntry, false); 
Powiązane problemy