StreamReader rd = new StreamReader("c:\\1.jpg");string buf = rd.ReadToEnd();StreamWriter rw = new StreamWriter(c:\\2.jpg");rw.Write(buf);rw.Flush();rw.Close();
从1.jpg将内容读出来存到2.jpg,为什么2.jpg和1.jpg不一致?应该怎么写呢?最好给个例子代码。谢谢!

解决方案 »

  1.   


                byte[] data = File.ReadAllBytes(@"c:\1.jpg"); 
                MemoryStream ms = new MemoryStream(data);
                Image img = Image.FromStream(ms);
                img.Save(@"c:\2.jpg");
      

  2.   

    File.Copy(@"c:\1.jpg",@"c:\2.jpg")
    肯定是一样的。
      

  3.   

     File.Copy("c:\\1.jpg", "c:\\2.jpg");直接使用file类的copy函数就可以了,它将1.jpg复制给2.jpg.StreamReader 是读取字符串的,也就是说将读取的byte[]数组解码为字符串。由于img不是字符串,转换为字符串会出现大量乱码,系统将部分乱码丢弃,再写入到2.jpg,数据自然不同。所以若非要先读取再写入,请使用BinaryReader
      

  4.   

    谢谢楼上,但是为什么StreamReader读出StreamWriter写入会不一致呢?
    用StreamReader和StreamWriter应该怎么操作呢
      

  5.   

    ReadToEnd方法,会做一定的转码操作,所以直接用read读就不会有问题了。
      

  6.   

    FileStream fileStream = new FileStream("c:\\1.jpg", FileMode.Open, FileAccess.Read);
    fileStream.Read(buf, 0, fileStream.Length);
    fileStreamW.Write(buf, 0, filelen);
    fileStreamW.Flush();
    fileStreamW.Close();
      

  7.   

            byte[] b = File.ReadAllBytes(Server.MapPath("image/11.jpg"));
            File.WriteAllBytes(@"E:\a.jpg", b);
      

  8.   


    应为StreamReader将读取的byte数组经过UTF-8或者GB2312等编码转为字符串。
    而图片所对应的byte数组是无法转为字符串的。
    比方说10000011,转码后为乱码,就标记为A
    比方说11000011,转码后也为乱码,也标记为A
    也就是说只要是乱码,他就标记为字符“A”。(由于乱码无法显示,所以用“A”来代替说明。)乱码转回去后得到一个Default值,也许是11100011。
    这样读取和写入就截然不同了。任何非字符串的数据,都不能用StreamReader来读取。
      

  9.   

            string in_file = "E:\\temp\\2_redblueman.gif";
            string out_file = "E:\\temp\\amtf.gif";
            FileStream infile = new FileStream(in_file, FileMode.Open);
            BinaryReader infileReader = new BinaryReader(infile);        byte[] byteGet = new byte[infile.Length];
            int iLength = (int)infile.Length;
            infileReader.Read(byteGet, 0, iLength);
            infileReader.Close();
            //      infileReader.Dispose();
            infile.Close();
            infile.Dispose();        int iArrLength = byteGet.Length;        FileStream outFile = new FileStream(out_file, FileMode.Create);
            BinaryWriter outFileWriter = new BinaryWriter(outFile);
            outFileWriter.Write(byteGet);
            outFileWriter.Close();
            outFile.Close();
            outFile.Dispose();