我正在尝试使用StreamReader
打开桌面上的文本文件(example.txt)。但是,当我运行我的代码时,它抛出的错误消息是:无法找到文件(无论代码路径如何,一直导致我的项目中的调试文件夹)。所以我想知道,Streamder
这个工作是错误的工具吗?
这是我正在使用的代码。
Console.WriteLine("What file would you like to load?");
string FileName = Console.ReadLine();
StreamReader Reader - new StreamReader(FileName);
StreamReader
答案 0 :(得分:4)
您的程序可能无法找到该文件,因为它查找的位置错误。你可以用这样的东西纠正它......
private void ReadFromDesktop(string fileName)
{
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string fullName = System.IO.Path.Combine(desktopPath, fileName);
using (StreamReader steamReader = new StreamReader(fullName))
{
string content = steamReader.ReadToEnd();
}
}
此方法采用文件名(可能是您在控制台上输入的文件),然后在环境中查询桌面路径。
然后它使用Path.Combine方法为文件创建完全限定名称。结果由流阅读器处理。
关键在于,如果您只提供文件名,那么应用程序将查看其根目录(就像您编写的那样,调试目录)。提示是一条错误消息,告诉您它使用调试目录的名称创建了一个完整路径。
答案 1 :(得分:2)
请改为尝试:
var reader = File.OpenText(FileName);
或小文件:
var allText = File.ReadAllText(FileName);
当然......指定的FileName总是可能实际上不存在....对吗?我的意思是,默认情况下,它可能会在.exe旁边寻找一个文件,该文件将在/.../.../bin/debug/或其他内容。
如果您特别想在当前用户的桌面文件夹中查找文件,则可能需要:
var fullPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\" + FileName;
var allText = File.ReadAllText(fullPath);
答案 2 :(得分:1)
“无法找到文件”实际上是发生了什么。注意异常详细信息并检查您是否输入现有文件名以及扩展名。 另外不要忘记丢弃StreamReader:
string text;
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), fileName);
using (var sr = new StreamReader(path))
{
text = sr.ReadToEnd();
}
答案 3 :(得分:0)
您的代码中没有明显的错误(假设您使用的是正确的语法而不是帖子中的实际代码),但错误可能是由于路径错误造成的。
如果文件存在且您使用绝对路径(从Windows上的驱动器号开始),您应该可以执行以下操作:
Console.WriteLine("What file would you like to load?");
string fileName = Console.ReadLine();
using (Stream reader = new StreamReader(fileName))
{
string line = reader.ReadLine();
// ...
}