检查文本文件是否在最后

时间:2016-03-19 19:33:32

标签: c# loading

我目前有一个单独的类来处理文件的加载,即此方法:

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");

对此有简单的解决方法吗?

2 个答案:

答案 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的值。