C# 文件读写小问题 ??????????????????????????????????????????

redblueman 2011-10-20 02:27:06
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不一致?应该怎么写呢?最好给个例子代码。谢谢!
...全文
115 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
酒鬼 2011-10-20
  • 打赏
  • 举报
回复
没有分,没有分。。..
酒鬼 2011-10-20
  • 打赏
  • 举报
回复
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();
daddi 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redblueman 的回复:]

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

应为StreamReader将读取的byte数组经过UTF-8或者GB2312等编码转为字符串。
而图片所对应的byte数组是无法转为字符串的。
比方说10000011,转码后为乱码,就标记为A
比方说11000011,转码后也为乱码,也标记为A
也就是说只要是乱码,他就标记为字符“A”。(由于乱码无法显示,所以用“A”来代替说明。)

乱码转回去后得到一个Default值,也许是11100011。
这样读取和写入就截然不同了。

任何非字符串的数据,都不能用StreamReader来读取。
huangwenquan123 2011-10-20
  • 打赏
  • 举报
回复
byte[] b = File.ReadAllBytes(Server.MapPath("image/11.jpg"));
File.WriteAllBytes(@"E:\a.jpg", b);
HKer_007 2011-10-20
  • 打赏
  • 举报
回复
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();
xiaoyu821120 2011-10-20
  • 打赏
  • 举报
回复
ReadToEnd方法,会做一定的转码操作,所以直接用read读就不会有问题了。
xiaoyu821120 2011-10-20
  • 打赏
  • 举报
回复
可能是编码的问题
redblueman 2011-10-20
  • 打赏
  • 举报
回复
谢谢楼上,但是为什么StreamReader读出StreamWriter写入会不一致呢?
用StreamReader和StreamWriter应该怎么操作呢
daddi 2011-10-20
  • 打赏
  • 举报
回复
 File.Copy("c:\\1.jpg", "c:\\2.jpg");


直接使用file类的copy函数就可以了,它将1.jpg复制给2.jpg.

StreamReader 是读取字符串的,也就是说将读取的byte[]数组解码为字符串。由于img不是字符串,转换为字符串会出现大量乱码,系统将部分乱码丢弃,再写入到2.jpg,数据自然不同。

所以若非要先读取再写入,请使用BinaryReader
卧_槽 2011-10-20
  • 打赏
  • 举报
回复
File.Copy(@"c:\1.jpg",@"c:\2.jpg")
肯定是一样的。
卧_槽 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wnyxy 的回复:]

C# code

byte[] data = File.ReadAllBytes(@"c:\1.jpg");
MemoryStream ms = new MemoryStream(data);
Image img = Image.FromStream(ms);
img.Save(@"c:\2.jp……
[/Quote]
这样更加不会一样
wnyxy001 2011-10-20
  • 打赏
  • 举报
回复

byte[] data = File.ReadAllBytes(@"c:\1.jpg");
MemoryStream ms = new MemoryStream(data);
Image img = Image.FromStream(ms);
img.Save(@"c:\2.jpg");
1.1 什么是Stream? 1.2 什么是字节序列? 1.3 Stream的构造函数 1.4 Stream的重要属性及方法 1.5 Stream的示例 1.6 Stream异步读写 1.7 Stream 和其子类的类图 2.1 为什么要介绍 TextReader? 2.2 TextReader的常用属性和方法 2.3 TextReader 示例 2.4 从StreamReader想到多态 2.5 简单介绍下Encoding 编码 2.6 StreamReader 的定义及作用 2.7 StreamReader 类的常用方法属性 2.8 StreamReader示例 3.1 为何介绍TextWriter? 3.2 TextWriter的构造,常用属性和方法 3.3 IFormatProvider的简单介绍 3.4 如何理解StreamWriter? 3.5 StreamWriter属性 3.6 StreamWriter示例 4.1 如何去理解FileStream? 4.2 FileStream的重要性 4.3 FileStream常用构造函数(重要) 4.4 非托管参数SafeFileHandle简单介绍 4.5 FileStream常用属性介绍 4.6 FileStream常用方法介绍 4.7 FileStream示例1:*文件的新建和拷贝(主要演示文件同步和异步操作) 4.8 FileStream示例2:*实现文件本地分段上传 5.1 简单介绍一下MemoryStream 5.2 MemoryStream和FileStream的区别 5.3 通过部分源码深入了解下MemoryStream 5.4 分析MemorySteam最常见的OutOfMemory异常 5.5 MemoryStream 的构造 5.6 MemoryStream 的属性 5.7 MemoryStream 的方法 5.8 MemoryStream 简单示例 : XmlWriter中使用MemoryStream 5.9 MemoryStream 简单示例 :自定义一个处理图片的HttpHandler 6.1 简单介绍一下BufferedStream 6.2 如何理解缓冲区? 6.3 BufferedStream的优势 6.4 从BufferedStream 中学习装饰模式 6.5 如何理解装饰模式 6.6 再次理解下装饰模式在Stream中的作用 6.7 BufferedStream的构造 6.8 BufferedStream的属性 6.9 BufferedStream的方法 6.10 简单示例:利用socket 读取网页并保存在本地 7.1 NetworkStream的作用 7.2 简单介绍下TCP/IP 协议和相关层次 7.3 简单说明下 TCP和UDP的区别 7.4 简单介绍下套接字(Socket)的概念 7.5 简单介绍下TcpClient,TcpListener,IPEndPoint类的作用 7.6 使用NetworkStream的注意事项和局限性 7.7 NetworkStream的构造 7.8 NetworkStream的属性 7.9 NetworkStream的方法 7.10 NetwrokStream的简单示例 7.11 创建一个客户端向服务端传输图片的小示例 版权归作者所有,仅供学习参考

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧