2

NUnrarを使用してファイルを抽出しました:

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

3 に答える 3

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

私がすでに使用しているコード(例外e)はさらに上にあるため、代わりに(例外ex)を使用する必要がありました。それはおそらくずさんなコードであり、整理整頓で行うことができます-しかし、遅くなると、「動作する」ままにしておく傾向があります。

于 2012-10-26T23:19:31.717 に答える
1
NUnrar.Archive.RarArchive.WriteToDirectory("update.rar", Application.StartupPath,NUnrar.Common.ExtractOptions.ExtractFullPath | NUnrar.Common.ExtractOptions.Overwrite);

「update.rar」が実行可能ファイルと同じディレクトリ内にある場合。

于 2014-10-03T07:53:40.557 に答える
0

RarArchive.ExtractToDirectory(source, destination);はうまくいくと思います。

または、ループを使用して、次のように変更しますstring path = Path.Combine(location, item.FilePath);

于 2012-10-26T19:30:48.563 に答える