c# - 位图类通过填充空字符来更改输入文件流

标签 c# .net winforms

我遇到了一些奇怪的问题,我真的不知道这是预期的行为还是错误。

我只是随机创建了一个文件流,它不是图像流,而是一些其他文件流,例如pdf/doc等。文件流以可写模式打开。碰巧我的另一部分代码,由于某些原因,将文件流的位置设置为一个很大的值,超出了实际文件流的长度。

然后我通过传递这个文件流来调用Bitmap的构造函数,并且存储在磁盘上的实际文件被更改并且文件大小变得太大。当我打开修改后的文件并检查时,我注意到当文件流的位置超出其长度时,Bitmap 类会填充空字符。文件大小变得等于我设置的位置值。然后我注意到我传递的任何文件都会发生这种情况,包括图像文件。

这是代码:

        Bitmap bitmap = null;
        FileStream fs = new FileStream(@"C:\\sampleFile.ext", FileMode.Open, FileAccess.ReadWrite);
        try
        {               
            fs.Position = fs.Length * 100;               
            bitmap = new Bitmap(fs);
        }
        catch (Exception)
        {
            if (bitmap != null)
                bitmap.Dispose();
            fs.Dispose();
        }

我的疑问是这是已知的行为吗?

最佳答案

来自 FileStream.Position: 的文档

Seeking to any location beyond the length of the stream is supported. When you seek beyond the length of the file, the file size grows.

所以,是的,这是有记录的和预期的行为。

关于c# - 位图类通过填充空字符来更改输入文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24797521/

相关文章:

forms - 在 Powershell 中检查是什么关闭了 Windows 窗体

c# - 如何将任何类型的日期转换为 dd/mm/yyyy

c# - 在 Windows 8 中使用 go-between 进行流式传输

c# - .NET Winforms 垂直进度条文本

c# - 在某个位置将值插入字符串?

c# - WCF NetTcp服务和流传输模式

c# - 移动列表框项目而不是 "selector bar"

c# - 自定义 DataGridViewCell 不触发数据源更改事件

.Net DriveInfo() 与 UNC 路径?

c# - 无限垂直滚动