Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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#覆盖streamreader,但我可以关闭并重新打开它吗?_C#_Cvs_Streamreader - Fatal编程技术网

c#覆盖streamreader,但我可以关闭并重新打开它吗?

c#覆盖streamreader,但我可以关闭并重新打开它吗?,c#,cvs,streamreader,C#,Cvs,Streamreader,我正在将我的一些cvs阅读代码合并到一个类中,我正在考虑让它覆盖streamreader。但是,我希望保留我添加的类私有值(delimiter、recordcount等),并能够关闭和重新打开文件 我需要能够的原因是快速通过以确定各种事情,例如分隔符、数据中是否有嵌入的换行符、实际记录计数、字段计数等 显然,我不能使用using(streamreader sr=new streamreader(filename)),因为这将在最后销毁对象,但是我可以关闭文件并重新打开它吗?我可以先执行cvsst

我正在将我的一些cvs阅读代码合并到一个类中,我正在考虑让它覆盖streamreader。但是,我希望保留我添加的类私有值(delimiter、recordcount等),并能够关闭和重新打开文件

我需要能够的原因是快速通过以确定各种事情,例如分隔符、数据中是否有嵌入的换行符、实际记录计数、字段计数等

显然,我不能使用using(streamreader sr=new streamreader(filename)),因为这将在最后销毁对象,但是我可以关闭文件并重新打开它吗?我可以先执行cvsstreamclass sr=new cvsstreamclass(文件名),然后执行sr.close()和sr.open()吗?我知道streamreader seek有问题,所以我可能不应该只使用它

或者我的做法完全错了,我应该将streamreader对象传递给处理解析之类的类吗

顺便说一句,我不打算切换到开源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
,使用()使类在
块中可用。

谢谢。这有很大的帮助。如果你觉得这是解决方案,请考虑将它标记为:“完成了。”我以前从未注意到那个复选标记。很抱歉。@Jim错了一个,我想:P也许usr的那个更适合你:)