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

本文关键字:通配符 调用 一直 7zip 存档 使用 | 更新日期: 2023-09-27 18:30:36

嘿,所有快速的问题都给你。我正在尝试使用 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();

    }

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

您很可能会遇到此问题,因为您的路径@"C:''mypath*testfile*"是一个逐字字符串,因此使用"*"字符或其他此类通配符在路径中被视为文字而不是通配符。尝试将 @ 从包含通配符的字符串的开头删除,这应该可以解决您的问题。您可以在此处找到有关字符串前缀上下文中使用的"@"字符的更详尽的说明:逐字字符串

我认为你的''以及你应该使用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 退出代码可以在这里找到

请记住,您可以在命令提示符窗口中对其进行测试,以确保它正常工作。

C:''program files''7-zip''7za.exe

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