C# 覆盖流阅读器,但我可以关闭并重新打开它吗?
本文关键字:新打开 我可以 覆盖 | 更新日期: 2023-09-27 18:20:48
我正在将我的一些 cvs 读取代码合并到一个类中,我正在考虑让它覆盖 streamreader。 但是,我想保留我添加的类私有值(分隔符、记录计数等(,并能够关闭并重新打开文件。
我需要能够的原因是快速传递以确定各种内容,例如分隔符、数据中是否有嵌入的换行符、实际记录计数、字段计数等。
显然我不能使用 (streamreader sr = new streamreadder(文件名((,因为这会在最后破坏对象,但我可以关闭文件并重新打开它吗? 我可以做 cvsstreamclass sr = new cvsstreamclass(filename(,然后是 sr.close(( 和 sr.open((吗? 我知道流读者搜索有问题,所以我可能不应该只使用它。
还是我做错了,我应该将流阅读器对象传递给处理解析之类的类吗?
顺便说一句,我不是在考虑切换到开源 cvs 类或其他库。我已经编写了很多这样的代码,并且可以工作。无需建议。
CSV 解析器不是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
继承,使你的类在using ()
块中可用。