我目前有一个单独的类来处理文件的加载,即此方法:
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;
}
我还想检查它是否已到达最后。此方法需要返回值,但此时返回值不起作用。
我在另一个类中调用此方法:
fileHandler.loadFile("text.txt");
对此有简单的解决方法吗?
答案 0 :(得分:4)
问题是您在内部范围内声明了content
变量并尝试从外部使用它。
尝试在content
块
while
变量
string content = string.Empty;
while(!sr.EndOfStream)
{
content = sr.ReadToEnd();
}
fs.Close();
return content;
请注意,您还需要为其指定一个值,这样如果您的代码没有进入while
块,它将返回一些内容。我已经给了它string.Empty
,但你可以给它null
或其他什么。
更新:作为进一步提示,ReadToEnd
将一直读到最后,因此您根本不需要检查EndOfStream
(将位于流的末尾。
而且,作为练习代码,没关系,但整个功能已经在框架中实现为File.ReadAllText
,所以这段代码是等价的:
public string loadFile(string filename)
{
return File.ReadAllText(filename);
}
一旦你有了这个,就没有必要完全使用你的loadFile
方法(它只是一个方法,它使用相同的参数调用另一个方法,因此它只是一个冗余函数调用),只需使用{ {1}}当您计划使用此方法时。
答案 1 :(得分:0)
创建一个类成员 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;
}
当你调用reachEnd()时只需要很好,因为它返回一个默认设置为false的值。