CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

文件二进制读取问题

楼主1982pc()2005-03-03 09:56:51 在 .NET技术 / C# 提问

我已二进制读取一个文件,为什么用ReadChar()读取只能读出几个字符,可是我用ReadByte却能读出很多东西呢?!  
          示例代码如下:  
          char[]   buffer   =   new   char[100];  
          FileStream   fs   =   new   FileStream(dlg.FileName,FileMode.Open,FileAccess.Read);  
          BinaryReader   r   =   new   BinaryReader(fs);  
          StringBuilder   buf   =   new   StringBuilder();  
          for(int   i   =   0;i   <   100;i++)  
          {  
                  buf.Insert(i,r.ReadByte());  
          }  
          以一个.exe的文件为例,当r.ReadByte()时可以读出"791030004000220010000000600000000000000  
  00000000000000000000081001311019231172381113111119139911113910182161110107920971403111412  
  21505044305684305804"  
          可是以ReadChar()时却只能读出"MZ"!!!!!!!!!  
   
   
          请各位大人说明一下是为什么?还有要怎么才能把文件已字符串形式全部读出并保存的字符串中?! 问题点数:50、回复次数:18Top

1 楼fsp666666(嗷嗷地费戈)回复于 2005-03-03 10:02:53 得分 10

1。为什么?答:不知道:(  
  2。保存到字符串?答:StreamReader   sr   =   new   StreamReader(   Filename   );   string   str   =   sr.ReadToEnd;sr.Close();Top

2 楼ncount(基督山伯爵)回复于 2005-03-03 10:11:19 得分 10

用r.ReadByte()是读出100个字节的2进制,有很多字节在unicode并没有对应可显示字符,所以无法输出。Top

3 楼web_gus(树欲静而风不止)回复于 2005-03-03 10:28:25 得分 0

upTop

4 楼1982pc()回复于 2005-03-03 15:55:19 得分 0

回   fsp666666(嗷嗷地费戈):  
      用你的方法和我用ReadChar()读出的结果一样~~~~~:(  
       
      回ncount(基督山伯爵):  
      读出的不是二进制吧,就算你说的对,那么没有对应字符就不显示.那有的应该显示吧,可是只显示一点儿,这是为什么?  
      期待大人出现~~~~~~  
      怎么才能实现啊,就像用文本方式打开.exe文件所得到的字符串!!!!!!Top

5 楼liulxmooo(娃娃)回复于 2005-03-03 16:00:10 得分 0

upTop

6 楼1982pc()回复于 2005-03-03 16:20:33 得分 0

怎么没人接啊,我顶!!!Top

7 楼ncount(基督山伯爵)回复于 2005-03-03 18:11:05 得分 0

upTop

8 楼1982pc()回复于 2005-03-03 19:08:56 得分 0

是不是啊,这个问题真的很难吗?+++++++分了~~~Top

9 楼windinwing(潇笑)回复于 2005-03-03 19:30:10 得分 10

char   占8字节,byte占4字节      
  ReadChar()     时如果读取流不是字符编码,那么会做抛弃处理,也就是说读不出任何东西  
  而byte是二进制流,不是字符也可以读出    
    这就是问题所在Top

10 楼JasonHeung(拥有一切不过就这样笑着哭)回复于 2005-03-03 19:34:36 得分 10

你可以用r.ReadString();Top

11 楼1982pc()回复于 2005-03-03 19:37:38 得分 0

哦,但是我用文本打开.exe文件时,明明看见还有其他字符,但为什么我就算读1000个还是只有"  
  MZ"两个字符呢?!  
        还有就是怎么才能实现像用文本方式打开.exe文件所看到的字符串!!!!!!Top

12 楼1982pc()回复于 2005-03-03 21:46:13 得分 0

回JasonHeung(拥有一切也只不过这样笑着哭)结果一样的!Top

13 楼1982pc()回复于 2005-03-03 22:49:41 得分 0

哎睡觉前再顶一次吧!Top

14 楼sanshi2(磊)回复于 2005-03-03 23:55:14 得分 0

先读取字节码,然后把字节码转化为字符串Top

15 楼wuyazhe(wyz&xyl)回复于 2005-03-04 00:00:02 得分 0

upTop

16 楼1982pc()回复于 2005-03-04 17:49:44 得分 0

回sanshi2(磊):  
  还是不行~~Top

17 楼tiaoci(我挑刺,我快乐)回复于 2005-03-04 18:03:26 得分 5

因为ReadChar   是按文本模式读取的么,  
   
  对于非文本的字符会自动过滤,自然读不进来了  
   
  要读进字符串,首先你要确定读进来的数据按什么方式编码  
   
  然后先按二进制方式读取,然后用Encoding.GetString转成字符串  
  Top

18 楼tiaoci(我挑刺,我快乐)回复于 2005-03-04 18:22:52 得分 5

你看到的   "791030..."并不是字符串,而是byte的值  
   
  要转成这种格式,只能自己手工转byte[]的值  
  Top

相关问题

  • 对二进制文件的读取
  • 怎样读取二进制文件?
  • 二进制文件的读取问题
  • c#读取二进制文件?
  • 读取二进制文件不完整
  • 二进制文件读取问题
  • 如何二进制读取文件?
  • 二进制文件读取问题
  • [求助]怎么从二进制文件中读取PNG文件?
  • 在c++ builder中如何读取和分析二进制文件?

关键词

  • 二进制
  • 文件
  • 读出
  • 读取
  • binaryreader
  • filestream
  • stringbuilder
  • fs
  • char

得分解答快速导航

  • 帖主:1982pc
  • fsp666666
  • ncount
  • windinwing
  • JasonHeung
  • tiaoci
  • tiaoci

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo