嘿,快问你的问题。我正在尝试使用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();
}
答案 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