DirectoryNotFoundException,即使文件确实存在

时间:2018-11-30 00:11:03

标签: c# .net directory

这是代码:

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,如果文件确实存在,则在尝试使用StreamWriter时它将抛出DirectoryNotFoundException。我不认为此代码是错误的,所以我对问题所在不知所措。

更新

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

  

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

更新

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

1 个答案:

答案 0 :(得分:2)

您正在使用

打开文件
File.CreateText(file);

File.CreateText(String) Method

  

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

然后,您不关闭它。然后,您尝试通过再次打开打开的文件来访问打开的文件

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))
   { 
   }

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

简而言之,您的代码值得怀疑,您需要对其进行修复,其次,您需要确定打开的文件是什么,其次,您需要检查该文件和/或目录的权限