2012-10-26 54 views
2

我已經使用NUnrar提取我的文件:的unrar文件

NUnrar.Archive.RarArchive archive = NUnrar.Archive.RarArchive.Open(location + "1.rar"); 

foreach (RarArchiveEntry item in archive.Entries) 
{ 
    string path = Path.Combine(location, Path.GetFileName(item.FilePath)); 
    item.WriteToFile(path); 
} 

如果我的文件沒有任何子目錄萬物的作品,但如果RAR文件有子目錄他們都提取到同一個文件夾,我怎麼可以保留子目錄和文件位置的模型

回答

4

我不得不做一些試驗,以獲得NUnrar以正常工作爲好。 也許我的成功可以幫助你。

RarArchive archive = RarArchive.Open(@"D:\Archives\Test.rar"); 
foreach (RarArchiveEntry entry in archive.Entries) 
{ 
    try 
    { 
     string fileName = Path.GetFileName(entry.FilePath); 
     string rootToFile = Path.GetFullPath(entry.FilePath).Replace(fileName, ""); 

     if (!Directory.Exists(rootToFile)) 
     { 
      Directory.CreateDirectory(rootToFile); 
     } 

     entry.WriteToFile(rootToFile + fileName, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite); 
    } 
    catch (Exception ex) 
    { 
     //handle your exception here.. 
    } 
} 

我已經使用了(Exception e)的代碼,所以我不得不使用(Exception ex)來代替。 這也可能是草率的代碼,並可以與整理做 - 但作爲遲到,因爲它是我傾向於離開它是因爲它「作品」 ..

+0

在最新版本中,沒有這樣的字段條目.FilePath,而是使用entry.Key。 – David

0

I'd thinkRarArchive.ExtractToDirectory(source, destination);應該工作。

或者用你的循環,將其更改爲string path = Path.Combine(location, item.FilePath);

1
NUnrar.Archive.RarArchive.WriteToDirectory("update.rar", Application.StartupPath,NUnrar.Common.ExtractOptions.ExtractFullPath | NUnrar.Common.ExtractOptions.Overwrite); 

如果「update.rar」是在與可執行文件相同的目錄中。

+0

這是有史以來最好的方式!不需要像法蘭克那樣複雜。 – Mika

相關問題