c#覆盖streamreader,但我可以关闭并重新打开它吗?
我正在将我的一些cvs阅读代码合并到一个类中,我正在考虑让它覆盖streamreader。但是,我希望保留我添加的类私有值(delimiter、recordcount等),并能够关闭和重新打开文件 我需要能够的原因是快速通过以确定各种事情,例如分隔符、数据中是否有嵌入的换行符、实际记录计数、字段计数等 显然,我不能使用using(streamreader sr=new streamreader(filename)),因为这将在最后销毁对象,但是我可以关闭文件并重新打开它吗?我可以先执行cvsstreamclass sr=new cvsstreamclass(文件名),然后执行sr.close()和sr.open()吗?我知道streamreader seek有问题,所以我可能不应该只使用它 或者我的做法完全错了,我应该将streamreader对象传递给处理解析之类的类吗 顺便说一句,我不打算切换到开源cvs类或其他库。我已经写了很多这样的代码,而且很有效。无需建议。CSV解析器不是c#覆盖streamreader,但我可以关闭并重新打开它吗?,c#,cvs,streamreader,C#,Cvs,Streamreader,我正在将我的一些cvs阅读代码合并到一个类中,我正在考虑让它覆盖streamreader。但是,我希望保留我添加的类私有值(delimiter、recordcount等),并能够关闭和重新打开文件 我需要能够的原因是快速通过以确定各种事情,例如分隔符、数据中是否有嵌入的换行符、实际记录计数、字段计数等 显然,我不能使用using(streamreader sr=new streamreader(filename)),因为这将在最后销毁对象,但是我可以关闭文件并重新打开它吗?我可以先执行cvsst
StreamReader
。这两者没有关系,也不应该有继承关系
您的
CsvReader
类应该有一个StreamReader
成员。您可以随意设置和操作该成员。例如,您可以随时关闭现有的读卡器并创建一个新的读卡器。我建议您将StreamReader
实际存储在您的读卡器类中。子类化StreamReader
没有任何意义,除非您打算以StreamReader
的形式将其公开给其他代码。我会这样做:
public class CSVReader
{
private StreamReader reader;
private string fileName;
//Your other properties and fields here
public CSVSReader(string filename)
{
this.fileName = fileName;
InitReader();
}
public void CloseFile()
{
if (reader != null)
{
reader.Close();
reader = null;
}
}
public void OpenFile()
{
CloseFile();
reader = new StreamReader(File.OpenRead(fileName));
}
//Your other methods here
}
显然,我没有使用任何try-catch块来打开文件,但这只是为了可读性
您还可以继承
IDisposable
,使用()使类在块中可用。谢谢。这有很大的帮助。如果你觉得这是解决方案,请考虑将它标记为:“完成了。”我以前从未注意到那个复选标记。很抱歉。@Jim错了一个,我想:P也许usr的那个更适合你:)