检查文本文件是否在末尾

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