我在以下代码中做错了什么?
public string ReadFromFile(string text)
{
string toReturn = "";
System.IO.FileStream stream = new System.IO.FileStream(text, System.IO.FileMode.Open);
System.IO.StreamReader reader = new System.IO.StreamReader(text);
toReturn = reader.ReadToEnd();
stream.Close();
return toReturn;
}
我在text.txt
文件夹中放了一个bin\Debug
文件,出于某种原因,每次输入此文件名("text.txt"
)时,我都会得到{{1}的例外情况}。
答案 0 :(得分:4)
假设当前工作目录与二进制文件所在的目录相同是不安全的。您通常可以使用以下代码来引用应用程序的目录:
string applicationDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
string filename = System.IO.Path.Combine(applicationDirectory, text);
这可能是也可能不是您遇到问题的解决方案。在旁注中,text
对于文件名来说并不是一个不错的变量名。
答案 1 :(得分:0)
File.ReadAllText(path)与您的代码完全相同。我建议使用像“c:...... \ text.txt”这样的root路径而不是相对路径。当前目录不一定设置为应用程序的主目录。
答案 2 :(得分:0)
您可以使用Process Monitor(FileMon的后继者)来准确找出您的应用程序尝试读取的文件。
答案 3 :(得分:0)
我的建议:
public string ReadFromFile(string fileName)
{
using(System.IO.FileStream stream = new System.IO.FileStream(fileName, System.IO.FileMode.Open))
using(System.IO.StreamReader reader = new System.IO.StreamReader(stream))
{
return = reader.ReadToEnd();
}
}
甚至
string text = File.OpenText(fileName).ReadToEnd();
您还可以检查文件是否存在:
if(File.Exists(fileName))
{
// do something...
}
最后 - 也许你的text.txt文件被其他进程打开,此时无法读取。
答案 4 :(得分:0)
如果我想打开一个总是在相对于应用程序启动路径的文件夹中的文件,我使用:
Application.StartupPath
简单地获取startuppath,然后我追加路径的其余部分(子文件夹和/或文件名)。
旁注:在现实生活中(即在最终用户的配置中),您需要阅读的文件的位置很少与应用程序启动路径相关。应用程序通常安装在Program Files文件夹中,应用程序数据存储在其他地方。