我遇到了一些奇怪的问题,我真的不知道这是预期的行为还是错误。
我只是随机创建了一个文件流,它不是图像流,而是一些其他文件流,例如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/