2013-07-04 43 views
0

解壓之後我用的lib Nunrarsite提取.rar文件:刪除壓縮文件與nunrar

RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite); 

減壓工作正常,但我不能提取後的該操作刪除原來的壓縮文件

System.IO.File.Delete(path); 

,因爲該文件被另一個進程 空穴功能:

try 
      { 
       FileStream fs = File.OpenRead(path); 
       if(path.Contains(".rar")){ 

        try 
        { 
         RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite); 
         fs.Close(); 

        } 
        catch { } 

        } 

      catch { return; } 
      finally 
      { 
       if (zf != null) 
       { 
        zf.IsStreamOwner = true; // Makes close also shut the underlying stream 
        zf.Close(); // Ensure we release resources 
       } 
      } 
      try 
      { 
       System.IO.File.Delete(path); 
      } 
      catch { } 

那麼我可以在解壓縮後刪除壓縮文件嗎?

+1

'fs'的類型是什麼(你使用'fs.Name'的地方)?我對這個庫不熟悉,但似乎你可能已經打開了一個'FileStream'而沒有關閉它。 – keyboardP

+0

它是一個'FileStream',我做了'fs.Close()'之前的刪除操作 –

+0

看到我的編輯plz –

回答

1

我不知道zf是什麼,但你也可以將它包裝在using聲明中。嘗試用這種

using(FileStream fs = File.OpenRead(path)) 
{ 
    if(path.Contains(".rar")) 
    { 
     try 
     { 
      RarArchive.WriteToDirectory(fs.Name, Path.Combine(@"D:\DataDownloadCenter", path2), ExtractOptions.Overwrite); 
     } 
     catch { } 
    } 
} 

這樣即使pathfs關閉不包含.rar更換您的FileStream fs一部分。如果文件名中存在rar,則只關閉fs

另外,該庫是否有自己的流處理?它可以有一個關閉它的方法。

+0

該庫沒有流處理。對於'zf':'ZipFile zf = null;' –