c# - DirectoryInfo.Exists 即使在文件夹被删除后也返回 true
问题描述
我正在创建一个临时文件夹,其中有一个文件夹,位于用户在应用程序启动时选择的文件夹中。我创建了一个删除按钮,该按钮应在用户使用应用程序时删除其中创建的临时文件夹和文件。
我首先单击删除按钮并删除文件和文件夹,如果再次单击删除按钮,即使我作为参数输入的文件夹不再存在,DirectoryInfo.Exist 方法仍然返回 true,并且由于它是是的,我收到一个错误,因为它试图删除一个不存在的文件夹。
我很感谢任何帮助:)
C#
if (FilePaths.mainDirectory.Exists)
{
if (DirectoryNotEmpty(FilePaths.mainDirectory.FullName))
{
if (DirectoryNotEmpty(FilePaths.actionDirectory.FullName))
{
foreach (var file in FilePaths.actionDirectory.GetFiles()) file.Delete();
}
Directory.Delete(FilePaths.actionDirectory.FullName);
foreach (var file in FilePaths.mainDirectory.GetFiles()) file.Delete();
Directory.Delete(FilePaths.mainDirectory.FullName);
}
}
这是 DirectoryInfo 对象的实例化
public static string mainFolder = "";
public static string actionFolder = "";
public static DirectoryInfo mainDirectory;
public static DirectoryInfo actionDirectory;
public static void CreateTemporaryFolders()
{
if (mainFolder != "")
{
actionFolder = Path.Combine(mainFolder, "Action Files");
mainDirectory = new DirectoryInfo(mainFolder);
actionDirectory = new DirectoryInfo(actionFolder);
}
}
如果需要更多代码,请告诉我。
解决方案
DirectoryInfo
主要是快照;对于现在的现实,请询问Directory.Exists(string)
,但请记住,任何磁盘检查本质上都是潜在的竞争条件(其他进程可能会在您检查后立即更改状态)。
推荐阅读
- python - 为什么不以这种方式使用 for 循环替换列表中的每个项目?
- java - Jackson - 嵌套映射值的自定义反序列化器
- php - 如何使用 htaccess 和 php 避免错误变量
- c# - 图像 src 指向 WEB FORM 中我的项目文件夹之外的文件
- c# - 为什么在面向 .NET Standard 的项目中可以不分配 Out 参数?
- python - 在循环中动态命名保存的数据帧
- java - 设置/更改默认 Java MaxHeapSize 或更改默认 JVM 命令设置
- python - 使用python对数据进行均匀和奇数切片
- azure - 是否可以在 Azure DevOps 的 Azure Powershell 任务中设置变量并将它们传递给另一个任务?
- java - 如何使用视图和路径变量测试 Spring 控制器?