首页 > 解决方案 > DirectoryNotFoundException 即使文件确实存在

问题描述

这是代码:

string file = Path.Combine(Environment.CurrentDirectory, "test.txt");
if (!File.Exists(file)) {
    File.CreateText(file); // will throw always
}

using (var writer = new StreamWriter(file)) { // will throw always
    //...
}

DirectoryNotFoundException如果文件不存在并且它试图创建它,这将抛出一个,如果文件确实存在,那么它会DirectoryNotFoundException在尝试使用 StreamWriter 时抛出。我不相信这段代码是错误的,所以我不知道问题出在哪里。

更新

文件的值为/tmp/test.txt. 是的,它总是抛出,例外是

System.IO.DirectoryNotFoundException: Could not find a part of the path '/tmp/test.txt'

更新

重新启动已解决此问题。我不知道为什么会这样,但它可能只是一个 IDE 问题。

标签: c#.netdirectory

解决方案


您正在打开一个文件

File.CreateText(file);

File.CreateText(String) 方法

返回StreamWriter使用 UTF-8 编码写入指定文件的 StreamWriter。

然后你没有关闭它。然后你试图通过再次打开它来访问打开的文件

using (var writer = new StreamWriter(file))

但是,您遇到的异常又是另一个问题。使用时StreamWriter

DirectoryNotFoundException指定的路径无效(例如,它位于未映射的驱动器上)。

除了以上所有,我建议你做的是

string file = Path.Combine(Environment.CurrentDirectory, "test.txt");
Console.WriteLine(file);

//FileMode.Create will create or overwwrite the file
using (var fs = new FileStream(file,FileMode.Create))
   using (var writer = new StreamWriter(fs))
   { 
   }

然后,如果您仍然有问题,请转到该目录并检查文件是否存在,检查目录和文件的权限并确保您具有适当的访问权限。

简而言之,您的代码是可疑的,您需要修复它,其次,您需要确定打开的是哪个文件,第三,您需要检查该文件和/或目录的权限


推荐阅读