2009-07-02 8 views
2

Ok,SharpZipLib ~ Comment extraire des fichiers spécifiques d'un zip

J'ai une liste de fichiers (objets SourceFile qui contiennent juste le nom de fichier uniquement) je veux tirer les fichiers spécifiques d'un zip et de les vider dans un répertoire temporaire afin que je puisse les distribuer plus tard.

je suis venu avec, mais je ne suis pas sûr sur la façon de procéder suivante ..

private List<string> ExtractSelectedFiles() 
{ 
List<SourceFile> zipFilePaths = new List<SourceFile>(); 
List<string> tempFilePaths = new List<string>(); 

if (!File.Exists(this.txtSourceSVNBuildPackage.Text)) { return tempFilePaths; }; 

FileStream zipFileStream = File.OpenRead(this.txtSourceSVNBuildPackage.Text); 
ZipInputStream inStream = new ZipInputStream(zipFileStream); 

foreach (SourceFile currentFile in _selectedSourceFiles) 
{ 
    bool getNextEntry = true; 

    while (getNextEntry) 
    { 
      ZipEntry entry = inStream.GetNextEntry(); 

     getNextEntry = (entry != null); 

       if (getNextEntry) 
      { 
      if (fileType == ".dll") 
      { 
       if (sourcefile.Name == Path.GetFileName(entry.Name)) 
       { 
       //Extract file into a temp directory somewhere 

       //tempFilePaths.Add("extractedfilepath") 
       } 
      } 
      } 
      } 
     } 

    return tempFilePaths; 
} 

Pour votre information:

public class SourceFile 
{ 
    public string Name { get; set; } //ex. name = "Fred.dll" 
} 

Répondre

2

ok .. vous pensé que je mets à jour tous après que je suis arrivé ensemble la pièce manquante dont j'avais besoin.

//in the code somewhere above: 
string tempDirectory = Environment.GetEnvironmentVariable("TEMP"); 
string createPath = tempDirectory + "\\" + Path.GetFileName(entry.Name); 


//my missing piece.. 
//Extract file into a temp directory somewhere 
FileStream streamWriter = File.Create(createPath); 

int size = 2048; 
byte[] data = new byte[2048]; 
while (true) 
{ 
    size = inStream.Read(data, 0, data.Length); 
    if (size > 0) 
    { 
     streamWriter.Write(data, 0, size); 
    } 
    else 
    { 
     break; 
    } 
} 

streamWriter.Close(); 
Questions connexes