我正在尝试删除文件夹和文件,一旦完成,然后想要将新的压缩文件夹解压缩到已删除的文件夹和文件的位置....
所以基本上
删除旧文件夹和文件 提取新文件夹和文件
有人可以告诉我我的代码有什么问题吗?删除部分正在停止它,如果我删除删除部分它可以正常...
using System;
using System.IO;
using System.IO.Compression;
namespace unZipMe
{
class Program
{
static void Main(string[] args)
{
//provide the folder to be zipped
//string folderToZip = @"c:\Temp\ZipSample";
DirectoryInfo di = new DirectoryInfo(@"c:\Temp\ZipSampleExtract");
DirectoryInfo file = new DirectoryInfo(@"c:\Temp\ZipSampleExtract");
//foreach (FileInfo file in di.GetFiles())
{
file.Delete(true);
}
//foreach (DirectoryInfo dir in di.GetDirectories())
{
di.Delete(true);
}
//provide the path and name for the zip file to create
string zipFile = @"c:\Temp\ZipSampleOutput\MyZippedDocuments.zip";
//call the ZipFile.CreateFromDirectory() method
//ZipFile.CreateFromDirectory(folderToZip, zipFile, CompressionLevel.Optimal, false);
//specif the directory to which to extract the zip file
string extractFolder = @"c:\Temp\ZipSampleExtract\";
//call the ZipFile.ExtractToDirectory() method
ZipFile.ExtractToDirectory(zipFile, extractFolder);
}
}
}
错误消息
' unZipMe.exe' (CLR v4.0.30319:DefaultDomain):已加载 ' C:\的Windows \ Microsoft.Net \组件\ GAC_32 \ mscorlib程序\ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll中&#39 ;. 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。 ' unZipMe.exe' (CLR v4.0.30319: DefaultDomain):已加载 ' C:\ Users \用户名\收存箱\ BegASPNET \ unZipMe \ unZipMe \ BIN \调试\ unZipMe.exe&#39 ;. 符号已加载。 ' unZipMe.exe' (CLR v4.0.30319:unZipMe.exe):已加载 ' C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ System.IO.Compression.FileSystem \ v4.0_4.0.0.0__b77a5c561934e089 \ System.IO.Compression.FileSystem.dll&#39 ;. 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。 ' unZipMe.exe' (CLR v4.0.30319: unZipMe.exe):已加载 ' C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ SYSTEM \ v4.0_4.0.0.0__b77a5c561934e089 \ System.dll中&#39 ;. 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。该程序' [16164] unZipMe.exe'具有 退出代码0(0x0)。
答案 0 :(得分:0)
只有当目录为空时,DirectorInfo实例上的Delete()调用才会成功。
DirectoryInfo di = new DirectoryInfo(@"c:\Temp\ZipSampleExtract");
di.Delete(true);
如果C:\ Temp \ ZipSampleExtract文件夹不为空,上面的代码将失败并将抛出IOException(这似乎是您的文件夹的情况,因为您已经提到这是zip提取的目标文件夹)。
相反,您可以在Directory类上使用Delete静态方法,并将第二个参数设置为true,以便递归删除该文件夹中的所有子目录和文件。
Directory.Delete(@"c:\Temp\ZipSampleExtract",true);
答案 1 :(得分:0)
如果删除不是必需的话,有一个解决方法:
由于提取路径位于临时目录中,因此您可以让系统执行删除操作。另一方面,每次执行解压缩操作时都使用GUID
创建新的提取目录。
var extractFolder = Path.Combine(@"c:\Temp\ZipSampleExtract\", Guid.NewGuid());
Directory.CreateDirectory(extractFolder);