【发布时间】:2012-08-21 14:22:25
【问题描述】:
这是语法吗
FileStream fs = new FileStream(strFilePath, FileMode.Create);
和这个一样吗?
FileStream fs = File.Create(strFilePath);
如果是,哪个更好?
【问题讨论】:
-
你有哪些标准来获得“更好”的资格。更易维护?更好的性能?等
标签: c# filestream
这是语法吗
FileStream fs = new FileStream(strFilePath, FileMode.Create);
和这个一样吗?
FileStream fs = File.Create(strFilePath);
如果是,哪个更好?
【问题讨论】:
标签: c# filestream
根据 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)。
【讨论】:
在我看来,我用的是这个:
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 保持灵活性。尽管有轻微的可读性损失。
File.Create 现在符合所有要求,将其更改为new FileStream(path, other, options) 确实不是什么大问题,而使用File.Create(path) 的意图立即变得清晰。
第二个对流使用不同的 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!
}
【讨论】:
他们做同样的事情。唯一真正的区别是,如果您愿意,前者可以让您在运行时使用不同的 FileMode(使用变量控制它),而后者只会执行 Create 操作。
顺便说一句,约定是在 using 块中处理文件流之类的东西,以便在它们超出范围时自动处理它们。
using (var fs = new FileStream(strFilePath, FileMode.Create))
{
//do some stuff
}
【讨论】:
第一个使用共享读取权限创建或覆盖文件,第二个使用 None。因此,这取决于您是否允许在处理文件时授予访问权限。
【讨论】:
使用第一个选项,您可以选择更多选项,例如:句柄、文件访问、文件模式、int 缓冲区大小……但是使用第二个选项,您可以选择的选项更少。
【讨论】: