2015-11-06 65 views
1

我正在将一些我的CVS阅读代码合并到一个类中,并且我正在考虑让它覆盖streamreader。但是,我想保留我添加的类私有值(分隔符,记录计数等)并能够关闭并重新打开该文件。c#覆盖streamreader,但我可以关闭并重新打开它?

的原因,我需要能够是做一个快速的传球来确定各种东西,如分隔符,是否有嵌入的换行符的数据,实际的记录数,场数等

很显然,我不能使用(streamreader sr = new streamreadder(filename)),因为这会在最后销毁对象,但是我可以关闭该文件并重新打开它?我可以做cvsstreamclass sr =新的cvsstreamclass(文件名),然后sr.close()和sr.open()?我知道流媒体搜索有问题,所以我可能不应该使用它。

或者我正在做的这一切都错了,我应该只是将streamreader对象传递给一个处理解析的类,而不是?

顺便说一句,我没有看着切换到开源的CVS类或其他库。我已经写了很多这样的代码,并且它可以工作。没有必要提出这个建议。

+0

你的意思是CSV? – GolfWolf

回答

1

CSV解析器不是 a StreamReader。两者不相关,不应该有继承关系。

你的CsvReader类应该有一个StreamReader成员。不管你喜欢,你都可以设置和操作那个成员。例如,您可以随时关闭现有阅读器并创建一个新阅读器。

1

我建议您实际上将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()区块内可用。

+0

谢谢。这有助于很多事情。 – Jim

+0

如果您认为这是解决方案,请考虑将其标记为已回答:) –

+0

完成。我从来没有注意到这个复选标记。对于那个很抱歉。 – Jim

相关问题