You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

C#控制台程序删除文件文件夹后解压异常问题求助

排查你的目录删除代码问题

嘿,我看了你的代码和问题描述,删除部分确实有几个明显的问题导致异常,咱们一个个说清楚:

1. 变量冲突 + 方法调用错误

你先定义了一个DirectoryInfo类型的变量叫file

DirectoryInfo file = new DirectoryInfo(@"c:\Temp\ZipSampleExtract");

然后注释里的删除文件循环里,又用file作为FileInfo的循环变量:

foreach (FileInfo file in di.GetFiles()) { file.Delete(true); }

这不仅会造成变量命名冲突(编译器直接报错),还犯了个方法调用的错误:FileInfo.Delete()是没有带布尔参数的重载的,Delete(true)DirectoryInfo的用法,文件删除直接用fi.Delete()就好。

2. 子目录删除逻辑完全错了

再看这段删除目录的代码:

foreach (DirectoryInfo dir in di.GetDirectories()) { di.Delete(true); }

你循环遍历的是di下的所有子目录,但每次执行的却是删除di本身(也就是父目录),这完全不是你要的效果——而且di.Delete(true)执行一次就会把整个目录包括所有子目录和文件全删了,根本不需要循环遍历子目录。

修复后的正确删除逻辑

如果你想清空目标目录但保留目录本身,可以这么写:

DirectoryInfo di = new DirectoryInfo(@"c:\Temp\ZipSampleExtract");

// 先删所有文件
foreach (FileInfo fi in di.GetFiles())
{
    fi.Delete();
}

// 再递归删除所有子目录
foreach (DirectoryInfo subDir in di.GetDirectories())
{
    subDir.Delete(true);
}

要是觉得上面的写法麻烦,更简单的方式是直接删除整个目录,再重新创建空目录

string targetPath = @"c:\Temp\ZipSampleExtract";
if (Directory.Exists(targetPath))
{
    // 递归删除整个目录及所有内容
    Directory.Delete(targetPath, true);
}
// 重新创建空目录
Directory.CreateDirectory(targetPath);

关于错误日志的补充

你提供的日志里程序退出码是0(正常退出),这说明你当时是注释了删除代码运行的。如果放开删除代码,编译器应该会抛出变量冲突、方法重载不匹配的错误,你可以看看编译器的错误提示,这些都是很直观的问题。

内容的提问来源于stack exchange,提问作者jbcom41

火山引擎 最新活动