2012-12-16 10 views
6

Ich versuche, .tar.gz eine Liste von Dateien aus einem Ordner mit SharpZipLib. Das Problem ist, egal wie die Dateipfade übergeben werden - das Ergebnis enthält immer die Dateipfade - und nicht nur die Dateien selbst. Was fehlt mir hier?Erstellen Sie ein .tar.gz-Archiv ohne Ordnerstruktur mit 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); 
     } 
     } 
    } 

was ich bekomme, ist eine "myGz.tar.gz" -Dateien. Wenn ich versuche, es mit 7.zip zu öffnen - ich bekomme die vollständige Ordnerstruktur im Archiv - c: \ testfolder \ test \, und darin - "test1", "test".

Wie entferne ich die Dateipfade?

Dank

+0

Dies könnte nützlich sein: http://stackoverflow.com/questions/1350653/c-sharp-sharpziplib-strips-irrelevant-directory-names –

+0

Das liegt daran, dass Sie es zu sagen! Warum denkst du, dass es anders geht? – leppie

+0

Ich habe keine andere Möglichkeit gesehen, tar hinzuzufügen, ohne den vollständigen Dateipfad anzugeben. M Sakher Sawan - danke! Es funktioniert zwar mit ZIP-Dateien - aber ich konnte kein Parapleel-Beispiel für .gz-Dateien finden – kiki

Antwort

2

hatte ich das gleiche Problem, und ich dachte, es nur aus, nachdem diese Frage zu finden.

Der Schlüssel ist, die Name Eigenschaft des tarEntry vor dem Hinzufügen in das Archiv zu setzen.

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