14

这是语法吗

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

和这个一样吗?

FileStream fs = File.Create(strFilePath);

如果是,哪个更好?

4

6 回答 6

13

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

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

使用bufferSize4096(默认)和FileOptions.None(也与 FileStream 构造函数相同),但FileShare标志不同:FileStream 构造函数使用FileShare.Read.

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

于 2012-08-21T14:26:55.860 回答
8

在我看来,我使用这个:

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

于 2012-08-21T14:27:35.303 回答
2

第二个对流使用不同的 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!
}
于 2012-08-21T14:32:10.557 回答
1

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

附带说明一下,约定是在 using 块中处理诸如文件流之类的事情,以便在超出范围时自动处理它们。

using (var fs = new FileStream(strFilePath, FileMode.Create))
{
    //do some stuff
}
于 2012-08-21T14:28:13.647 回答
0

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

于 2012-08-21T14:27:32.513 回答
0

对于第一个,您有更多的选项可以做:句柄、文件访问、文件模式、int 缓冲区大小,....但是对于第二个,您可以做的选择更少。

于 2012-08-21T14:29:56.890 回答