C# 即使文件确实存在,DirectoryNotFoundException也不例外

C# 即使文件确实存在,DirectoryNotFoundException也不例外,c#,.net,directory,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 //... } 如果文件不存在并且试图创建它,则会

代码如下:

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
:找不到
路径“/tmp/test.txt”的一部分

更新
重新启动已修复此问题。我不知道这是为什么造成的,但这可能只是IDE问题。

您正在使用打开一个文件

File.CreateText(file);

返回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))
   { 
   }
然后,如果仍然存在问题,请转到该目录并检查文件是否存在,检查目录和文件的权限,并确保您具有适当的访问权限


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

File.CreateText(file);

返回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))
   { 
   }
然后,如果仍然存在问题,请转到该目录并检查文件是否存在,检查目录和文件的权限,并确保您具有适当的访问权限


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

您是否有足够的权限从code?
环境访问文件夹/目录。CurrentDirectory
应该立即访问代码的文件夹,直接访问解决方案所在的位置,因此我相信它有足够的权限。文件夹已设置为“所有者”、“我是所有者”,并且我具有读写权限。
Environment.CurrentDirectory应立即访问代码的文件夹
,这既不确定,也不确定您是否具有访问其中文件的权限。最好使用用户数据文件夹或临时目录。我已经为我的用户授予了完全的文件夹权限,所以这看起来很奇怪。尽管如此,我还是要测试一下,它又失败了。这次,我使用了
Path.Combine(Path.GetTempPath(),“test.txt”)但仍然失败。这肯定是针对临时道路的。我开始怀疑骑士的权限可能存在潜在问题。我不太愿意在rider上尝试
sudo
,但我肯定会
sudo
使用dotnet命令,并尝试以那种方式运行它。您是否有足够的权限从code访问文件夹/目录?
环境。CurrentDirectory
应该立即访问代码的文件夹,直接访问解决方案所在的位置,所以我相信它有这么多的许可。文件夹已设置为“所有者”、“我是所有者”,并且我具有读写权限。
Environment.CurrentDirectory应立即访问代码的文件夹
,这既不确定,也不确定您是否具有访问其中文件的权限。最好使用用户数据文件夹或临时目录。我已经为我的用户授予了完全的文件夹权限,所以这看起来很奇怪。尽管如此,我还是要测试一下,它又失败了。这次,我使用了
Path.Combine(Path.GetTempPath(),“test.txt”)但仍然失败。这肯定是针对临时道路的。我开始怀疑骑士的权限可能存在潜在问题。我不太愿意在rider上尝试
sudo
,但我肯定会
sudo
使用dotnet命令,并尝试以这种方式运行它。1)非常好的一点,我不会在创建后处理它。我已经添加了,但是仍然会抛出异常。2) 我将尝试使用FileMode。创建并查看它是否解决了问题。我尝试了重新启动,但它似乎解决了我的问题。我想其中一些问题远远超出了我所能解决的范围。虽然我不能将此标记为答案,但由于这并没有解决问题,因为它不是由程序本身引起的,我感谢您尝试解决问题。1)非常好,我不会在创建后处理它。我已经添加了,但是仍然会抛出异常。2) 我将尝试使用FileMode。创建并查看它是否解决了问题。我尝试了重新启动,但它似乎解决了我的问题。我想其中一些问题远远超出了我所能解决的范围。虽然我不能将此标记为答案,因为这并没有解决问题,因为它不是由程序本身引起的,我感谢您尝试解决问题。