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

我只是随机创建了一个文件流,它不是图像流,而是其他一些文件流,例如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();
        }


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

最佳答案

这是预期的行为,因为在ReadWrite模式下打开了文件,并且将位置定位为所需的偏移量。由于文件位置指向指定的位置,因此当文件需要由其他对象读取时,文件将以零字节填充。

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

10-12 00:25
查看更多