【问题标题】:FileNotFound Exception While Opening File打开文件时出现 FileNotFound 异常
【发布时间】:2013-04-18 04:39:37
【问题描述】:

我有一个项目通过 StreamReader 将多个文本文件读入列表,我将文件添加到资源下的解决方案中,当我尝试使用 StreamReader 引用文件时,我收到“FileNotFound”异常。

文件被复制到 bin\debug\Resources 中,错误提示它试图在 bin\debug 下找到它们。如何在不使用文字路径的情况下引用它们? (例如 C:\users\etc),因为当我编译时,如果我引用实际路径,它将不会在其他人的 PC 上运行。

调用文本文件的代码:

using (sr = new StreamReader("FileName.txt"))
{
    while (!sr.EndOfStream)
        Names.Add(sr.ReadLine());
}

在文本文件属性下,我将其设置为“始终复制”,在构建操作下将其设置为“嵌入式资源”。

基本上,我的主要目标是将项目编译为 exe,并在内部引用文本文件(程序不会更改它们的内容),因此我的应用程序将是可移植的。

【问题讨论】:

  • 你试过“资源/文件名.txt”吗? :)
  • 尝试复制bin\debug下的文件
  • 使用相对文件路径。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • @J0HN,这正在工作,谢谢。我现在正试图通过 Shaharyar 的回答使其可移植。凌天云,你的意思是手动的,还是在Visual Studio中怎么做? tnw 我真的不想这样做,请参阅问题。约翰桑德斯,好的,现在就读。

标签: c# resources streamreader


【解决方案1】:

错误很明显。将代码更改为:

using (sr = new StreamReader("Resources\FileName.txt"))
{
    while (!sr.EndOfStream)
        Names.Add(sr.ReadLine());
}

【讨论】:

    【解决方案2】:

    在您的情况下,只需替换路径 Resources\FileName.txt 即可消除错误

    在其他情况下,正如您提到的,您想要制作一个可移植的 .exe。然后你需要在你的应用程序中嵌入文件。现在看看如何在 .exe 中嵌入文件:

    • Solution Explorer 中展开Properties
    • 双击Resources

      Resources标签的左上方,会有一个组合框

    • 选择文件

    • 现在只需将文件拖放到那里
    • 要嵌入文件,您可以通过右键转到每个文件的属性 点击它。从Persistence 中选择Embedded in .resx 财产。

    要使用该文件,您可以使用Properties.Resources.YourFile

    更多详情,请点击链接http://msdn.microsoft.com/en-us/library/7k989cfy(v=vs.80).aspx

    【讨论】:

    • (抱歉,雷暴导致我家停电,现在重新开启)您的答案非常清楚,但是设置“嵌入 .Resx”的选项在哪里? i.imgur.com/amQpvUC.png
    • 是的,此选项不适用于Files,但它的工作方式与其他嵌入文件相同。我从来没有研究过为什么,真丢脸!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多