因此,我有一小块代码可以检测文件夹中的文件,并在它们成为特定年龄后系统地对其进行拉链。我现在正在处理一段代码,根据用户请求解压缩某个日期范围的文件,以便在软件中使用。
我的问题是zip文件的命令行字符串工作得很好,但解压缩不...下面是代码的摘录,显示我如何解压缩,请让我知道我应该做些什么以确保解压缩。谢谢!
private void UnZipFile()
{
if (myRecord == null)
{
if (File.Exists(zipInfo.FullName))
{
Process LogUnzipper = new Process();
//32-bit system
if (File.Exists("c:\\Program Files\\WinZip\\WZZIP.exe"))
{
//WZZIP.exe being the WinZip executable
LogUnzipper.StartInfo.FileName = "c:\\Program Files\\WinZip\\WZZIP.exe";
}
//64-bit system
else if (File.Exists("c:\\Program Files (x86)\\WinZip\\WZZIP.exe"))
{
//WZZIP.exe being the WinZip executable
LogUnzipper.StartInfo.FileName = "c:\\Program Files (x86)\\WinZip\\WZZIP.exe";
}
//here is where I think I'm screwing up something..
string action = "-e " + "\"" + zipInfo.FullName + "\"" + " \"" + zipInfo.DirectoryName + "\"";
//happen in background
LogUnzipper.StartInfo.CreateNoWindow = true;
LogUnzipper.StartInfo.UseShellExecute = false;
LogUnzipper.StartInfo.Arguments = action;
LogUnzipper.Start();
while (!LogUnzipper.HasExited)
{
LogUnzipper.WaitForExit(500);// 1/2 sec
}
//adding break point at this line yields no unzipped Log file :(
}
...
我的想法是我在某种程度上在string action
中将cmd称为错误?即使我在Windows命令提示符下测试它的格式是否正确。
***应该注意的是ZipInfo.FullName就是ex:“C:\ Users \ 16208 \ Software \ Beta \ logs \ 6_2013 \ Log_10AM_to_11AM.zip”,就形式来说,所以我给了一个压缩物品的准确路径。
答案 0 :(得分:0)
您可以使用一些免费的开源.Net库来进行压缩和解压缩(如SLaks建议的那样)。例如DotNetZip。
using (ZipFile decompress = ZipFile.Read(ZipFilePath))
{
foreach (ZipEntry e in decompress)
{
e.Extract(TargetPath, ExtractExistingFileAction.OverwriteSilently);
}
}
至于你的代码,等待半秒可能不足以解压缩完成。您也可以尝试在命令行中运行unzip命令并检查输出。
答案 1 :(得分:0)
如果你安装了WinZip,试试这个:
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", @"/c start winzip32 -e " + fileName + @" C:\SomeDirectory");
rocStartInfo.UseShellExecute = false;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();
其中fileName是* .rar文件的完整路径。