首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.net c#中使用7za

在.net c#中使用7za
EN

Stack Overflow用户
提问于 2015-11-09 22:30:28
回答 1查看 928关注 0票数 0

我是c#以及这个网站的新手,所以我可能会犯一些错误,但希望我也能学到东西。

我正在开发一个应用程序,从.7z中提取一个文件,读取并删除它,然后再转到下一个文件(其中大约有12k个文件,占用了很大的空间)。

现在,我正在使用.NET 2.0,而且我还没有找到从归档文件中提取单个文件的简单解决方案。我偶然看到一篇文章解释说,您可以通过命令行使用7za.exe进行操作,所以我做到了。现在的问题是,如果我在我的应用程序7za中尝试做同样的事情,就会抛出“无法使用绝对路径名”错误。但是,正如我所说的,相同的参数在命令提示符下工作。

我的想法是获取压缩文件夹中所有文件的列表,并将其放入文本文件中。从那里得到第一个名字,解压缩,阅读,删除它,然后移到下一个,就很容易了。这就是我要得到的清单:

代码语言:javascript
复制
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = @"C:\Users\yadayada\Desktop\7za.exe"; //just testing
string parameters= "-y l " + path_file7z + " > " + path_file_destination + @"\file.txt"; 
//needeless to say, path_file7z and path_file_destination are strings with the correct path like "C:\Users\yadayada\Desktop"
startInfo.Arguments = parameters
process.StartInfo = startInfo;
process.StartInfo.UseShellExecute = false;
process.Start();
process.WaitForExit();

正如我所说的,当进程结束时,我可以看到一个控制台的打开和关闭。我拿了一个截图来检查它说了什么,而我得到的错误就是我在问题开始时说的那个错误。

现在,有谁知道我为什么会犯这个错误,以及如何修复这个错误呢?

溶液

结束后,联合国采取了一个不太优雅(温和)的解决方案,有效。

列出姓名:

代码语言:javascript
复制
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = @"cmd.exe";
string parameters= "/k -y l " + path_file7z + " > " + path_file_destination + @"\file.txt"; 
//needeless to say, path_file7z and path_file_destination are strings with the correct path like "C:\Users\yadayada\..."
startInfo.Arguments = parameters
process.StartInfo = startInfo;
process.StartInfo.UseShellExecute = false;
process.Start();
Thread.Sleep(1000);
process.Kill();

现在,完成此操作后,提取部分将通过类似于Igor的链接提供的方法进行处理:

代码语言:javascript
复制
public void ExtractFile(string source, string element, string destination)
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = /*7zG.exe's path*/;
startInfo.Arguments = @"-y x " + source + " -o" + destination + " " + element + " -r";
process.StartInfo = startInfo;
process.StartInfo.UseShellExecute = false;
process.Start();
process.WaitForExit();            
}

我认为它现在运行得很好。如果我有进一步的问题,我将更新这与我提出的解决方案提供的帮助。再次感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-11-09 22:43:41

使用本教程进行7zip:https://stick2basic.wordpress.com/2013/04/25/how-to-extract-7z-file-to-a-folder-c-net/

如果允许rar和zip,请使用此库:http://dotnetzip.codeplex.com/

代码语言:javascript
复制
private void MyExtract()
  {
      string zipToUnpack = "C1P3SML.zip";
      string unpackDirectory = "Extracted Files";
      using (ZipFile zip1 = ZipFile.Read(zipToUnpack))
      {
          // here, we extract every entry, but we could extract conditionally
          // based on entry name, size, date, checkbox status, etc.  
          foreach (ZipEntry e in zip1)
          {
            e.Extract(unpackDirectory, ExtractExistingFileAction.OverwriteSilently);
          }
       }
    }

编辑

这可以帮到你:Unzip a file in c# using 7z.exe

很高兴帮你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33619546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档