C# 相同文件的大小不同,在Windows XP&;上读取;视窗7
我正在尝试将图像文件读取到流中。但当我在WindowsXP和Windows7上运行程序时,流的长度有所不同(两个系统上的图像文件相同)。这是我的密码:C# 相同文件的大小不同,在Windows XP&;上读取;视窗7,c#,.net,stream,C#,.net,Stream,我正在尝试将图像文件读取到流中。但当我在WindowsXP和Windows7上运行程序时,流的长度有所不同(两个系统上的图像文件相同)。这是我的密码: private void ImageToStream(Stream stream, string imgPath) { System.Drawing.Image img = null; img = System.Drawing.Image.FromFile(imgPath, true); img.Save(stream, img
private void ImageToStream(Stream stream, string imgPath)
{
System.Drawing.Image img = null;
img = System.Drawing.Image.FromFile(imgPath, true);
img.Save(stream, img.RawFormat);
}
当然,我在两个系统上使用相同的映像进行测试
文件系统是NTFS。当我将这张照片发布到网站时,它在Windows7上运行良好,在WindowsXP上运行错误。我想知道在Windows7和WindowsXP中从流中读取图像时会有什么不同
提前感谢 我已经解决了这个问题
private void ImageToStream(Stream stream, string imgPath)
{
FileStream fileStream = new FileStream(imgPath,
FileMode.Open, FileAccess.Read);
byte[] buffer = new Byte[checked((uint)Math.Min(4096,
(int)fileStream.Length))];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
stream.Write(buffer, 0, bytesRead);
}
现在这两个系统都可以正常工作了。我认为这是因为Image.FromFile使用本机GDI调用加载图像。我已经使用了新的代码,它现在运行良好。您似乎试图做的是从一个流复制到另一个流。这是一个非常简单的操作,当然不需要了解源流的内容。相反,您的代码将解码图像,然后重新编码。没有理由认为这会产生相同的文件。事实上,对于有损压缩算法,这将导致质量损失
相反,您需要做的只是将源流的内容直接复制到输出流。此问题详细介绍了该主题:问题是什么?两个操作系统是否使用相同的文件系统(Fat与NTFS)、压缩、加密等?读取流时是否有任何错误,或者您想问为什么流长度不同??相差多少?文件是否压缩为一种格式,而不是另一种格式?谢谢您的帮助。这是我用来测试的图像:大约50字节的差异,但我不知道为什么两个操作系统上有差异。两个操作系统有相同的文件系统吗?NTFS或FAT?有没有理由不使用stream.CopyTo?