C# 相同文件的大小不同,在Windows XP&;上读取;视窗7

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

我正在尝试将图像文件读取到流中。但当我在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.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?