【发布时间】: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”并将其用作指针。现在可以了!
-
我不明白你的意思,但目前我认为这个问题对任何人都没有帮助,也没有足够的信息来真正回答它。我建议您删除它,或对其进行大量编辑以提供更多信息。