Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一个“问题”;“核选择”;用于关闭/释放文件?_C#_File_File Io_Io_Nullreferenceexception - Fatal编程技术网

C# 是否有一个“问题”;“核选择”;用于关闭/释放文件?

C# 是否有一个“问题”;“核选择”;用于关闭/释放文件?,c#,file,file-io,io,nullreferenceexception,C#,File,File Io,Io,Nullreferenceexception,我最初的相关问题()被标记为重复,我使用了假设的重复 ()试图解决我的问题,但在某些文件I/O操作中,仍然会出现大量空引用异常 基于过去的那篇《宁静邮报》,我修改了之前的代码: public FileQuickRead(string filename) { try { SR = File.OpenText(filename); } catch (Exception ex) { CCR.ExceptionHandler(ex,

我最初的相关问题()被标记为重复,我使用了假设的重复 ()试图解决我的问题,但在某些文件I/O操作中,仍然会出现大量空引用异常

基于过去的那篇《宁静邮报》,我修改了之前的代码:

public FileQuickRead(string filename)
{
    try
    {
        SR = File.OpenText(filename);
    }
    catch (Exception ex)
    {
        CCR.ExceptionHandler(ex, "FileQuickRead.FileQuickRead");
    }
    . . .
……为此:

public FileQuickRead(string filename)
{
    // Added 6/27/2013; adapted from https://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-use
    try
    {
        using (Stream stream = new FileStream(filename, FileMode.Open))
        {
            try
            {
                SR = File.OpenText(filename);
            }
            catch (Exception ex)
            {
                CCR.ExceptionHandler(ex, "FileQuickRead.FileQuickRead");        
            }
        }
    }  
    catch (Exception exc)
    {
        // If the "using Stream filename" fails
        #if TRACE
            UtilCE.LogInfo.Add2LogFile(string.Format("Catch block in FileQuickRead caught: {0}", exc.Message));
        #endif
    }
}
…日志文件从不包含“Catch Block”字符串,因此它已超过“using filename”,但显然无法调用file.OpenText()

此外,它在类中的其他两个方法(即ReadLn和FileClose)上失败:

public string FileReadLn()
{
    try
    {
        aLine = SR.ReadLine();
    }
    catch (Exception ex)
    {
        CCR.ExceptionHandler(ex, "FileQuickRead.FileReadLn");
    }
    return aLine;
}

public void FileClose()
{
    try
    {
        SR.Close();
    }
    catch (Exception ex)
    {
        CCR.ExceptionHandler(ex, "FileQuickRead.FileClose");
    }
}
我在FileQuickRead、FileReadLn和FileClose上连续三次出现NullReferenceException

类中唯一的其他内容是这些全局声明:

private StreamReader SR;
private string aLine;
呼叫者这样做:

fileQuickRead = new FileQuickRead(fn);
// Read the line from the file*
aLine = fileQuickRead.FileReadLn();
. . .
while ((aLine != null) && (aLine != ""))
. . .
    aLine = fileQuickRead.FileReadLn();
    if (aLine == null)
        continue;
. . .
    finally
    {
        fileQuickRead.FileClose();
    }
FileClose()方法中的SR.Close()是否不够?我需要做些什么来完全刷新文件,还是

  • 好极了——这是整个项目中唯一的评论,它只泄露了显而易见的东西

我认为我们这里有一个XY问题(即回答您的问题不会解决您的问题)。你在这篇文章和前面的问题中发布的代码毫无意义。你能退一步告诉我们你的
FileQuickRead
类应该做什么吗?因为在我看来,你在
StreamReader
周围放置了一个不必要且令人困惑的包装器;这就是维护它的全部问题——我不知道“架构师”在想什么。有很多混淆、抽象、委托、后台线程不注意其他后台线程,等等。我以前见过不好的代码,但这需要陈旧的蛋糕。这就是为什么我添加了关于评论的评论(这不是我的代码;如果是的话,我会成为一个……我不知道是什么,但我会退出编程,成为一名精神病医生或其他什么的。或者另一个答案是:我可以告诉你,但我必须自杀,因为如果我能理解这一团糟,(等等)如果你不能解释你想要完成什么,那么我看不出我们如何能给你任何关于如何完成的建议。