2009-07-02 4 views
2

Ok,SharpZipLib ~ Как извлечь определенные файлы из почтового

У меня есть список файлов (объекты Исходный_файла, которые просто содержат только имя файла), то я хочу, чтобы вытащить эти конкретные файлы из почтового индекса и сбросить их в каталог temp, чтобы я мог распространять их позже.

Я придумал это, но я не уверен в том, как действовать дальше ..

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; 
} 

FYI:

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

ответ

2

нормально .. вычислял я обновлю Вас все после того, как я получил вместе недостающую часть, в которой я нуждался.

//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();