【问题标题】:FileStream Create文件流创建
【发布时间】:2012-08-21 14:22:25
【问题描述】:

这是语法吗

 FileStream fs = new FileStream(strFilePath, FileMode.Create);

和这个一样吗?

FileStream fs = File.Create(strFilePath);

如果是,哪个更好?

【问题讨论】:

  • 你有哪些标准来获得“更好”的资格。更易维护?更好的性能?等

标签: c# filestream


【解决方案1】:

根据 JustDecompile 的说法,这确实很重要,因为 File.Create 最终会调用:

new FileStream(path, 
               FileMode.Create, 
               FileAccess.ReadWrite, 
               FileShare.None, 
               bufferSize, 
               options);

bufferSize 为 4096(默认)和 FileOptions.None(也与 FileStream 构造函数相同),但 FileShare 标志不同:FileStream 构造函数使用FileShare.Read 创建流。

所以我说:如果您不关心其他选项,请考虑可读性并使用File.Create(string)

【讨论】:

    【解决方案2】:

    在我看来,我用的是这个:

    using (FileStream fs = new FileStream(strFilePath, FileMode.Create))
    {    
        fs.Write("anything");
        fs.Flush();
    }
    

    他们基本上做同样的事情,但是这个创建文件并在创建/写入模式下打开它,你可以设置你的缓冲区大小和所有参数。

    new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, options);
    

    使用 File.Create 它包装了所有这些默认缓冲区和参数。使用我的新 FileStream(strFilePath, FileMode.Create); 您将获得更好的灵活性和管理。 但在这一点上,如果您想要更多的可读性或管理选项,它更多的是个人选择!

    【讨论】:

    • 我更喜欢这个,File.Create 只是为 FileStream 构造函数包装了一些默认值,如果您以后需要它,您可以使用FileStream 保持灵活性。尽管有轻微的可读性损失。
    • 不错,我也喜欢这种方式,用这种方式控制效果更好
    • @MAXE 真的!我只是写这个作为例子,我更正了!
    • @GrantH。注意 YAGNI。使用您的逻辑,应该始终使用最扩展的构造函数,以防万一将来某个地方我们想更改其中一个参数。如果曾经。如果File.Create 现在符合所有要求,将其更改为new FileStream(path, other, options) 确实不是什么大问题,而使用File.Create(path) 的意图立即变得清晰。
    【解决方案3】:

    第二个对流使用不同的 FileMode:看看这篇文章

    http://msdn.microsoft.com/en-us/library/47ek66wy.aspx

    管理此方法的默认值!

    但是使用using 语句,这样任何资源都会以正确的方式释放!

    using (FileStream fs = new FileStream(strFilePath, FileMode.Create))
    {
        // HERE WHAT YOU WANT TO DO!
    }
    

    【讨论】:

      【解决方案4】:

      他们做同样的事情。唯一真正的区别是,如果您愿意,前者可以让您在运行时使用不同的 FileMode(使用变量控制它),而后者只会执行 Create 操作。

      顺便说一句,约定是在 using 块中处理文件流之类的东西,以便在它们超出范围时自动处理它们。

      using (var fs = new FileStream(strFilePath, FileMode.Create))
      {
          //do some stuff
      }
      

      【讨论】:

        【解决方案5】:

        第一个使用共享读取权限创建或覆盖文件,第二个使用 None。因此,这取决于您是否允许在处理文件时授予访问权限。

        【讨论】:

          【解决方案6】:

          使用第一个选项,您可以选择更多选项,例如:句柄、文件访问、文件模式、int 缓冲区大小……但是使用第二个选项,您可以选择的选项更少。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-02
            • 2013-04-09
            相关资源
            最近更新 更多