字符串转换为流的问题

yijianxiangde100 2008-11-12 10:55:14
我的问题如下:有两个程序。帮忙给看一下了,什么原因了。

第一段代码:运行正常。

FileStream fs = new FileStream(@"F:\test\1.jpg", FileMode.Open);
Image image1 = Image.FromStream(fs);
image1.Save(@"F:\test\testpicture\1.jpg", ImageFormat.Jpeg);

就是利用流的形式,另外创建了一个图片,和原来的图片一模一样。程序运行没有问题。但是,看下面的程序。

FileStream fs = new FileStream(@"F:\test\1.jpg", FileMode.Open);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.ASCII);
string strTemp = sr.ReadToEnd();
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(strTemp.ToCharArray());
fs1.Write(buffer, 0, buffer.Length);
Image image2 = Image.FromStream(fs1);[
//这里出现异常了。"参数无效" ,这和上面的一样,为什么是无效了。都是FileStream 对象啊
FileStream fs1 = File.Create(@"F:\test\testpicture\2.jpg");

其实,我是想在网络上传递,图片了,不用socket通信,但是考虑到,socket的通信是发送byte[]数组,所以才这样做的了。把图片转换为string,在转换为byte[]
然后发送,在接受方,把此过程反过来,但是遇到问题了。不知道该如何解决了。谢谢了。
...全文
257 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yijianxiangde100 2008-11-15
  • 打赏
  • 举报
回复

楼主我自己解决了,最终是这么个想法了,不管是什么类型的文件,通过网络的传递都是一样的,先构造为流,在构造为byte[] 这样就行了。然后就是网络传输了。这是我自己写的代码了。希望大家指教了。
public static void FileToFile()
{
///发送端,传输文件,把任何类型的文件都去传递,做成byte数组
FileStream fs = File.Open(@"F:\test\1.rar", FileMode.Open);
byte[] buffer = new byte[fs.Length];
byte[] bufferAnother=new byte[buffer.Length];
fs.Read(buffer, 0, buffer.Length);
buffer.CopyTo(bufferAnother, 0);

//send the buffer

FileStream fsAnother = File.Open(@"F:\test\testTheFile\1copyt.rar", FileMode.CreateNew);

fsAnother.Write(bufferAnother, 0, bufferAnother.Length);
//fsAnother.Write(buffer, 0, buffer.Length);

}
tianjinldl 2008-11-13
  • 打赏
  • 举报
回复
学习
yueyebohe 2008-11-13
  • 打赏
  • 举报
回复
FileStream fs1 = File.Create(@"F:\test\testpicture\2.jpg");
fs1.Write(buffer, 0, buffer.Length);
Image image2 = Image.FromStream(fs1);


这样试试看~

止戈而立 2008-11-13
  • 打赏
  • 举报
回复
多写了一句。。将下面这句注释掉。
// BinaryReader br=new BinaryReader(stream);
止戈而立 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 yijianxiangde100 的帖子:]
其实,我是想在网络上传递,图片了,不用socket通信,但是考虑到,socket的通信是发送byte[]数组,所以才这样做的了。把图片转换为string,在转换为byte[]
然后发送,在接受方,把此过程反过来,但是遇到问题了。不知道该如何解决了。谢谢了。[/Quote]

直接从流转成byte[]就好了,不要去转字符串。。


MemoryStream stream=new MemoryStream();
byte[] photo=null;
Image img=new Bitmap(@"F:\test\testpicture\1.jpg");
img.Save(stream,ImageFormat.Bmp);
BinaryReader br=new BinaryReader(stream);
photo=stream.ToArray();
stream.Close();
shangfeng88 2008-11-13
  • 打赏
  • 举报
回复
FileStream fs = new FileStream(@"F:\test\1.jpg", FileMode.Open);
用fs直接读出里面的字节后发送就可以了;
没必要在转换编码的,
更没必要转换为string,这样转来转去就已经改变编码格式了


下边的代码你参考下
FileStream fs = new FileStream(@"D:\aaaa.jpg", FileMode.Open);

FileStream fs1 = File.Create(@"D:\222.jpg");
for (int i = 0; i <= fs.Length - 1; i++)
{
fs1.WriteByte((byte)fs.ReadByte());
}
birdlonger 2008-11-13
  • 打赏
  • 举报
回复
貌似你的fs1定义在你使用参数的后面!
长沙三毛 2008-11-13
  • 打赏
  • 举报
回复
从文件流读到byte[]里,再用Encoding.ASCII.GetString()成一个字符串,传输,到另一端把该字符串变为byte[],再把该byte[]写到FileStream。应该不要StreamRead吧
ericllzh 2008-11-13
  • 打赏
  • 举报
回复
Image image2 = Image.FromStream(fs1);[
多了个"["?还是你写多了?

110,545

社区成员

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

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

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