C#console应用程序删除文件和文件夹

时间:2018-05-15 15:39:02

标签: c#

我正在尝试删除文件夹和文件,一旦完成,然后想要将新的压缩文件夹解压缩到已删除的文件夹和文件的位置....

所以基本上

删除旧文件夹和文件 提取新文件夹和文件

有人可以告诉我我的代码有什么问题吗?删除部分正在停止它,如果我删除删除部分它可以正常...

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)。

2 个答案:

答案 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);