如何创建和使用类级别的fileStream对象?

时间:2014-08-06 18:20:58

标签: c# .net

我想声明一个类级别的fileStream对象,但在特定方法中初始化它然后关闭它...这可能会重复发生。我不知道正确的术语来真正描述我想要做的事情,所以这里有一些伪造的代码,应该表明你想要我想做的事。

    Some Class () {

      declare empty filestream object named FILEREADER

      Some Method () {

        intialize FILEREADER with text_file.txt

        DO STUFF

        FILEREADER.Close();
      }

      Some Method Two () {

        intialize FILEREADER with text_file.txt

        DO STUFF

        FILEREADER.Close();
      }
    }

现在我知道如何同时声明和初始化这个对象,我只是不知道如何将它分成两个步骤。以下是与我想要做的相同的单步。

    FileStream FILEREADER = new FileStream("text_file.txt",
                FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

2 个答案:

答案 0 :(得分:0)

试试这个:

class SomeClass
{
    FileStream FILEREADER; // will be null by default

    void SomeMethod()
    {
        using (FILEREADER = new FileStream(
            "text_file.txt",
            FileMode.Open,
            FileAccess.Read,
            FileShare.ReadWrite))
        {
            // do stuff
        }
        FILEREADER = null;
    }
    void SomeMethod2()
    {
        using (FILEREADER = new FileStream(
            "text_file.txt",
            FileMode.Open,
            FileAccess.Read,
            FileShare.ReadWrite))
        {
            // do stuff
        }
        FILEREADER = null;
    }
}

虽然我不确定为什么你需要FILEREADER作为会员。为什么不在每个方法中声明一个本地FileStream?如果在每种方法中打开和关闭它,则无需将其存储在这些方法之外。

你真的应该这样做:

class SomeClass
{
    void SomeMethod()
    {
        using (FileStream FILEREADER = new FileStream(
            "text_file.txt",
            FileMode.Open,
            FileAccess.Read,
            FileShare.ReadWrite))
        {
            // do stuff
        }
    }
    void SomeMethod2()
    {
        using (FileStream FILEREADER = new FileStream(
            "text_file.txt",
            FileMode.Open,
            FileAccess.Read,
            FileShare.ReadWrite))
        {
            // do stuff
        }
    }
}

(请注意,在此代码中,using条款将自动处理Close FileStream

答案 1 :(得分:0)

您是说您不希望将new FileStream(...)代码与这些特定参数一起用于每种方法吗?然后创建一个方法:

public class DoesStuffToFiles 
{
    private FileStream OpenTextFile()
    {
        return new FileStream("text_file.txt",
                              FileMode.Open, 
                              FileAccess.Read, 
                              FileShare.ReadWrite);
    }

    public void SomeMethod1()
    {
        using (var file = OpenTextFile())
        {

        }
    }

    public void SomeMethod2()
    {
        using (var file = OpenTextFile())
        {

        }
    }
}