【问题标题】:DirectoryNotFoundException even when file does existDirectoryNotFoundException 即使文件确实存在
【发布时间】:2019-05-02 03:08:21
【问题描述】:

这是代码:

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 问题。

【问题讨论】:

  • 您是否有足够的权限从代码访问文件夹/目录?
  • Environment.CurrentDirectory 应该立即访问代码的文件夹,直接在解决方案所在的位置,所以我相信它有那么多权限。文件夹设置为所有者,我是所有者,我有读写权限。
  • Environment.CurrentDirectory should be immediately accessing the code's folder 这不确定,也不确定您是否有权访问那里的文件。最好使用用户数据文件夹或临时目录
  • 我已将我的用户的文件夹权限授予完全权限,所以这似乎很奇怪。尽管如此,我会对此进行测试。
  • 又失败了。这次我用了Path.Combine(Path.GetTempPath(), "test.txt");,还是失败了。这绝对应该针对临时路径。我开始怀疑 Rider 的权限可能存在潜在问题。我很犹豫要不要在骑手上尝试sudo,但我肯定会sudo dotnet 命令并尝试以这种方式运行它。

标签: c# .net directory


【解决方案1】:

您正在使用

打开文件
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))
   { 
   }

然后如果你仍然有问题,去那个目录并检查文件是否在那里,检查目录和文件的权限,并确保你有适当的访问权限。

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

【讨论】:

  • 1) 好点,我不会在创建后丢弃它。我已经添加了,但仍然抛出异常。 2) 我会尝试使用 FileMode.Create 看看它是否能解决问题。
  • 我尝试重新启动,它似乎解决了我的问题。我想其中一些问题远远超出了我可以解决的范围。虽然我无法将此标记为答案,但由于它不是由程序本身引起的,因此并没有解决问题,我感谢您尝试解决问题。
猜你喜欢
  • 1970-01-01
  • 2013-02-10
  • 2021-12-02
  • 2013-12-14
  • 2014-02-17
  • 2013-10-13
  • 2020-07-14
  • 1970-01-01
  • 2012-06-30
相关资源
最近更新 更多