【问题标题】:File.AppendAllText throws FileNotFoundExceptionFile.AppendAllText 抛出 FileNotFoundException
【发布时间】:2020-07-11 14:52:30
【问题描述】:

我正在开发 Internet Explorer 插件,我写了一个附加到浏览器的 dll,我有一些事件,在 ot 内部我正在用 File.AppendAllText 写入一些文本文件,这会抛出 FileNotFoundException,我是在我的代码的其他地方使用AppendAllText,如果文件不存在,它会创建一个新文件,我的问题是为什么会抛出这个异常以及如何避免这种情况。

我找到了this 的答案,但它没有说明如何避免错误(即写入文件而不出现此异常),也没有理解这是一个“文档错误”

这里的文件路径:

static string assem = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
static string logPath = Path.Combine(assem, "Log.log");

这里出现错误的那一行:

File.AppendAllText(logPath, "some text" + Environment.NewLine);

这里例外:

【问题讨论】:

  • 阅读第二个答案并发布您的代码。 stackoverflow.com/a/26630895/4123703 因为在这种情况下您的路径可能无效..或其他原因。不知道有没有细节。
  • 命令AppendAllText 将文本添加到已经存在的文件中。编译时 bin\Debug 文件夹内容被删除。您是在尝试向其添加内容之前创建文件吗?

标签: c# internet-explorer exception add-on


【解决方案1】:

可能 IE 阻止了扩展写入本地文件,尝试取消选中浏览器中的“保护模式”

工具 --> Internet 选项 --> 安全 --> 取消勾选“启用保护模式”

【讨论】:

    【解决方案2】:

    异常类型有点误导;在某些方面,最好抛出ArgumentException。您看到此异常的原因是您提供的路径不是有效的文件路径(它包含无效字符或超过 255 个字符)。

    在调试器的代码中检查此时路径的值,打开命令提示符并发出以下命令以查看是否可以写入该路径:

    echo "Testing creating a file at this path" > "C:\Path\To\Your\File.txt"
    

    我会加快猜测该路径包含一个不存在的目录(例如,您的路径是 C:\Path\To\Your\File.txt,但 Path 目录不包含 To 子目录)。

    【讨论】:

    • IExtonsionsTests是现有文件夹的名称(有错别字),看代码是如何得到这个路径的,它去项目所在的地方,路径是有效的
    • 我在 cmd echo "Testing creating a file at this path" > "D:\IExtonsionsTests\1\bin\Debug\Log.log" 中写了它将文本写入文件
    • 暂时将该路径硬编码到您的程序中,看看它是否有效。如果它在工作之前没有继续“向上”一个目录,例如接下来尝试写信给D:\IExtonsionsTests\1\bin\Log.log。你能把文件写到你的D盘根目录吗?
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多