使用7zip进行C#存档,一直挂在通配符上

时间:2014-11-17 14:19:27

标签: c# .net process zip 7zip

嘿,快问你的问题。我正在尝试使用7zip作为系统进程将文件目录存档到zip文件夹中,但我遇到了一个奇怪的错误。每当我在源文件名中执行通配符规范时,例如“* .txt”,它就可以正常工作。但是,一旦我在实际文件名周围使用通配符*(我需要并且无法解决这个问题),7zip似乎就挂了。我可以在文件夹中看到存档目录,但我无法打开它,我必须通过任务管理器关闭7zip。

有什么建议吗?

代码如下:

public static void archiveFiles(string executionDirectory,string workDirectory,
string[] files)

    {
       string sourceName = @"C:\mypath\*testfile*";  <----// This seems to be my issue

       string targetName = @"C:\\testcompress\archive.zip";

       ProcessStartInfo p = new ProcessStartInfo();

       p.FileName = @"C:\program files\7-zip\7z.exe";

       p.Arguments = "a -t7z \"" + targetName + "\" \"" + sourceName + "\" -mx=9";

       p.WindowStyle = ProcessWindowStyle.Hidden;

       Process x = Process.Start(p);

       x.WaitForExit();


    }

2 个答案:

答案 0 :(得分:1)

您最有可能遇到此问题,因为您的路径是&#34; C:\ mypath * testfile *&#34;是一个逐字字符串,因此使用&#34; *&#34;字符或其他此类通配符在路径中被视为字面而不是通配符。尝试从包含通配符的字符串的开头取消@,这应该可以解决您的问题。你可以找到更详尽的解释&#34; @&#34;字符,在字符串的前缀的上下文中使用,在这里: Verbatim Strings

答案 1 :(得分:0)

我认为您的问题以及您应该使用7za.exe而不是7z.exe这一事实。确保您的应用程序有权写入相关目录。

string sourceName = @"C:\mypath\*testfile*";  
string targetName = @"C:\testcompress\archive.zip"; 
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = @"C:\program files\7-zip\7za.exe"; 
p.Arguments  =  string.Format ( "a -t7z {0} {1} -mx=9",targetName,sourceName);
p.WindowStyle = ProcessWindowStyle.Hidden;
Process x = Process.Start(p);
x.WaitForExit();

console.writeline(string.format("7zip returned with exit code {0}",x.ExitCode));

可以找到7zip退出代码here

请记住,您可以在命令提示符窗口中对其进行测试,以确保其有效。

C:\ program files \ 7-zip \ 7za.exe a -t7z C:\ program files \ 7-zip \ 7za.exe C:\ mypath * testfile * -mx = 9