c# - 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 问题。
解决方案
您正在打开一个文件
File.CreateText(file);
返回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))
{
}
然后,如果您仍然有问题,请转到该目录并检查文件是否存在,检查目录和文件的权限并确保您具有适当的访问权限。
简而言之,您的代码是可疑的,您需要修复它,其次,您需要确定打开的是哪个文件,第三,您需要检查该文件和/或目录的权限
推荐阅读
- javascript - 将多个数组合并为单个数组
- c++ - 函数返回的未来
- javascript - JavaScript 仅适用于一个 div
- apache-nifi - 将 nifi web-api bean 注入自定义处理器
- android - 在android中制作Canvas Draggable圆圈
- sql-server - 如何在 SQL Server 中使用 bcp 运行 .sql 文件
- javascript - 具有最小弧长/宽度的 d3 v4 饼图
- javascript - 获取类属性中的所有类名
- sql - Postgres 如何表示行 ID 的树?
- python - 如何附加到文件(FTP Python)