检查文本文件是否在末尾
Checking if a text file is at the end
我目前有一个单独的 class 来处理文件的加载,这是这种方法:
public string loadFile(string filename)
{
FileStream fs;
StreamReader sr;
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
sr = new StreamReader(fs);
while(!sr.EndOfStream)
{
string content = sr.ReadToEnd();
}
fs.Close();
return content;
}
我也想看看到底有没有到。此方法需要一个 return 值,但目前 return 所在的位置不起作用。
我在另一个 class 中调用此方法:
fileHandler.loadFile("text.txt");
有没有简单的解决方法?
问题是您在内部范围内声明 content
变量并试图从外部使用它。
尝试在 while
块之外声明您的 content
变量
string content = string.Empty;
while(!sr.EndOfStream)
{
content = sr.ReadToEnd();
}
fs.Close();
return content;
请注意,您还需要给它一个值,这样如果您的代码没有进入 while
块,它就会 return 一些东西。我给了它 string.Empty
,但你可以给它 null
或其他任何东西。
更新:作为进一步的提示,ReadToEnd
将始终读到最后,因此您无需检查 EndOfStream
全部(如果此函数始终干净地退出,它 将 位于流的末尾)。
而且,作为练习代码,这很好,但是整个功能已经在框架中作为 File.ReadAllText
实现,所以这段代码将是等效的:
public string loadFile(string filename)
{
return File.ReadAllText(filename);
}
一旦你有了它,就没有必要使用你的 loadFile
方法了(它只是一个调用另一个具有相同参数的方法的方法,所以它只是一个冗余的函数调用),只是在您计划使用此方法时使用 File.ReadAllText()
。
创建一个 class 成员
bool _reachedEnd = false
public string loadFile(string filename)
{
FileStream fs;
StreamReader sr;
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
sr = new StreamReader(fs);
_reachedEnd= false;
while(!sr.EndOfStream)
{
string content = sr.ReadToEnd();
}
_reachedEnd= true;
fs.Close();
return content;
}
还有请求的函数:
public bool reachedEnd()
{
return _reachedEnd;
}
调用 reachedEnd() 时要小心,因为它 returns 默认设置为 false 的值。
我目前有一个单独的 class 来处理文件的加载,这是这种方法:
public string loadFile(string filename)
{
FileStream fs;
StreamReader sr;
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
sr = new StreamReader(fs);
while(!sr.EndOfStream)
{
string content = sr.ReadToEnd();
}
fs.Close();
return content;
}
我也想看看到底有没有到。此方法需要一个 return 值,但目前 return 所在的位置不起作用。
我在另一个 class 中调用此方法:
fileHandler.loadFile("text.txt");
有没有简单的解决方法?
问题是您在内部范围内声明 content
变量并试图从外部使用它。
尝试在 while
块之外声明您的 content
变量
string content = string.Empty;
while(!sr.EndOfStream)
{
content = sr.ReadToEnd();
}
fs.Close();
return content;
请注意,您还需要给它一个值,这样如果您的代码没有进入 while
块,它就会 return 一些东西。我给了它 string.Empty
,但你可以给它 null
或其他任何东西。
更新:作为进一步的提示,ReadToEnd
将始终读到最后,因此您无需检查 EndOfStream
全部(如果此函数始终干净地退出,它 将 位于流的末尾)。
而且,作为练习代码,这很好,但是整个功能已经在框架中作为 File.ReadAllText
实现,所以这段代码将是等效的:
public string loadFile(string filename)
{
return File.ReadAllText(filename);
}
一旦你有了它,就没有必要使用你的 loadFile
方法了(它只是一个调用另一个具有相同参数的方法的方法,所以它只是一个冗余的函数调用),只是在您计划使用此方法时使用 File.ReadAllText()
。
创建一个 class 成员 bool _reachedEnd = false
public string loadFile(string filename)
{
FileStream fs;
StreamReader sr;
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
sr = new StreamReader(fs);
_reachedEnd= false;
while(!sr.EndOfStream)
{
string content = sr.ReadToEnd();
}
_reachedEnd= true;
fs.Close();
return content;
}
还有请求的函数:
public bool reachedEnd()
{
return _reachedEnd;
}
调用 reachedEnd() 时要小心,因为它 returns 默认设置为 false 的值。