【问题标题】:C# looks for non-existent file in contents rather than displaying contentsC# 在内容中查找不存在的文件而不是显示内容
【发布时间】:2020-12-11 20:20:22
【问题描述】:

我正在尝试 C# 中的文件 I/O(因为我是初学者,所以以前从来没有这样做过)。我在解决方案的资源中放置了一个包含“一些文本”(字面意思)的简单文本文件,根据在线教程编写了一些代码,然后按 F5 进行构建。我原以为控制台窗口中会显示“一些文本”,但出现了异常!

Could not find file 'F:\VS\FileTesting\FileTesting\bin\Debug\some text'.

正如我上面所说,“一些文本”是文件的内容,它的名称是“important.txt”

这是我正在使用的代码:

try
{
     /* using (StreamReader reader = new StreamReader(Properties.Resources.important))
     {
          string line;

          while ((line = reader.ReadLine()) != null)
          {
              Console.WriteLine(line);
          }
     } */
     string contents = File.ReadAllText(Properties.Resources.important);
     Console.WriteLine(contents);
     Console.WriteLine("Contents displayed successfully.");
     Console.ReadKey();
}
catch (Exception e) {
    MessageBox.Show("An error occured. Exception: " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

(上面的注释部分来自另一个帖子here,它解释了如何逐行读取文件)

根据下面@JonSkeet 的评论,我想我找到了原因:看起来File.ReadAllText 读取并将Properties.Resources.important 的内容视为文件名而不是预期的文本。 “一些文本”是它唯一能找到的东西,因此它在构建目录中搜索具有该名称的文件,这是不存在的。我所做的是将原始文件重命名为“pointer.txt”,在其中写入“important.txt”并将其用作指向我要读取的文件的指针。

我可以让它读取一个外部文件,但我希望我的资源中有这个文件。另外,我似乎无法将其设为嵌入式 - 该选项已禁用。这也需要做什么吗?

感谢任何帮助。

【问题讨论】:

  • 嗯,大概Properties.Resources.important 是“一些文字”。我强烈怀疑如果你查看你的资源文件,你会看到“一些文本”,但它应该是“important.txt”。
  • @JonSkeet 非常感谢!我根据您的评论快速编造了一些东西:我将资源文件重命名为“pointer.txt”,其中包含“important.txt”并将其用作指针。现在可以了!
  • 我不明白你的意思,但目前我认为这个问题对任何人都没有帮助,也没有足够的信息来真正回答它。我建议您删除它,或对其进行大量编辑以提供更多信息。

标签: c# file io


【解决方案1】:

您不需要使用File 方法来读取资源的内容。 File 方法用于从文件系统中读取文件。

要访问资源的内容,只需写Properties.Resources.important。您可以通过Console.WriteLine(Properties.Resources.important) 将资源的内容写入控制台。

【讨论】:

  • 谢谢!不过因为我不在家,我稍后会试试看。
  • 再次感谢!我试过了,现在可以了。您还让我清楚地了解了资源中的文件和文件系统中的文件之间的区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2014-07-20
  • 2021-09-10
  • 1970-01-01
  • 2013-10-09
相关资源
最近更新 更多