File.WriteAllBytes或FileStream.Write

7
File.WriteAllBytes和FileStream.Write/WriteBytes之间有什么区别?我有一个位图对象,我想在磁盘上创建一个新的bmp/jpg/png文件。我记得在某个地方读到过WriteAllBytes在底层使用FileStream.Write?
4个回答

18

WriteAllBytes 是一个方便方法,它封装了底层的 Stream 操作(如创建文件、写入流、关闭流等)。如果符合您的需求,请使用它。如果需要对底层操作进行更多控制,请回退到使用 Stream 或类似的方法。

这一切都关乎使用正确的抽象方法来完成任务。


1
FYI: @driis是正确的,下面是由.Net框架(主分支)使用的实际代码https://github.com/dotnet/corefx/blob/master/src/System.IO.FileSystem/src/System/IO/File.cs#L462 - Damian

3
使用WriteAllBytes仅保存所有字节,如果需要监视进度,请使用Write。

2

你的做法不对。保存位图对象需要使用Image.Save()方法,该方法知道如何使用图像编码器将位图转换为字节,以便其他程序(或您自己)可以重新加载。有几个图像编码器可供选择,您可以使用允许选择ImageFormat的Save()重载来选择所需的编码器。BMP格式是本机Windows格式,未经压缩。PNG格式很好,是一种无损压缩格式。JPEG格式是一种有损压缩格式,适用于照片。文件大小按顺序从大到小。


1
如果你想保存位图,应该使用WriteAllBytes。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接