C# 是否有一个“问题”;“核选择”;用于关闭/释放文件?
我最初的相关问题()被标记为重复,我使用了假设的重复 ()试图解决我的问题,但在某些文件I/O操作中,仍然会出现大量空引用异常 基于过去的那篇《宁静邮报》,我修改了之前的代码: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,
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()是否不够?我需要做些什么来完全刷新文件,还是
- 好极了——这是整个项目中唯一的评论,它只泄露了显而易见的东西
FileQuickRead
类应该做什么吗?因为在我看来,你在StreamReader
周围放置了一个不必要且令人困惑的包装器;这就是维护它的全部问题——我不知道“架构师”在想什么。有很多混淆、抽象、委托、后台线程不注意其他后台线程,等等。我以前见过不好的代码,但这需要陈旧的蛋糕。这就是为什么我添加了关于评论的评论(这不是我的代码;如果是的话,我会成为一个……我不知道是什么,但我会退出编程,成为一名精神病医生或其他什么的。或者另一个答案是:我可以告诉你,但我必须自杀,因为如果我能理解这一团糟,(等等)如果你不能解释你想要完成什么,那么我看不出我们如何能给你任何关于如何完成的建议。