C#读双字节文件的问题

shally5 2008-03-06 03:03:21
C#读双字节文件的问题?
现在要读取一个RAW文件,是双字节类型的文件大小是10000 x 5000 x 2(因为是双字节所以要乘2)
我在C++中用
short int buf[10000];或WORD buf[10000];
for(int y=0;i<5000;y++)
{
ifile.read(buf,sizeof(buf));一次从文件读10000个双字
....自己处理buf[x]中的数据就可以了,很快的
}
现在用C#如何能象C++那样一下读一块数据啊!
我现在是一个一个的Uint16去读文件的,太慢了,有好的快速方法吗?多谢!

...全文
524 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
斌狼孩一 2010-10-11
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<books>
<book email="zhoujunhui">
<name>rjzjh</name>
<price>jjjjjj</price>
</book>
</books>
斌狼孩一 2010-10-09
  • 打赏
  • 举报
回复
StreamReader sr = new StreamReader(@"d:\1.txt",new System.Text.UnicodeEncoding());
sr.ReadBlock(cBuff,0,10000);
Jim3 2008-03-07
  • 打赏
  • 举报
回复
StreamReader sr = new StreamReader(@"d:\1.txt",new System.Text.UnicodeEncoding());
sr.ReadBlock(cBuff,0,10000);

这样读出来是对的,又学习到一点,呵呵

[Quote=引用 12 楼 vwxyzh 的回复:]
文本文件?
直接用StreamReader,把Encode设置为Unicode(或者其它,要看文件的编码到底是什么)
用int Read(char[] buffer, int index, int count);方法直接读到char数组里面
或者用string ReadLine();方法读一行
或者用string ReadToEnd();方法读取整个文件
[/Quote]
rangeon 2008-03-07
  • 打赏
  • 举报
回复
学习
vwxyzh 2008-03-07
  • 打赏
  • 举报
回复
文本文件?
直接用StreamReader,把Encode设置为Unicode(或者其它,要看文件的编码到底是什么)
用int Read(char[] buffer, int index, int count);方法直接读到char数组里面
或者用string ReadLine();方法读一行
或者用string ReadToEnd();方法读取整个文件
lizhengnan 2008-03-07
  • 打赏
  • 举报
回复
读取文件的方式应该是和你存文件的方式是一致的,如果你是用字节流存储的,那你就该用字节流向外读.而你现在用CHAR型一次读两个字节,结果就会出错
Jim3 2008-03-06
  • 打赏
  • 举报
回复
这样读出来的应该不行,比如硬盘中0x01 0x02,读出来的结果是char1=0x01;char2 = 0x02;

而不是期望的char1 = 0x0102;

c#中我还没有找到和c++中类似的,看看别人有没有好办法

建议用C++.net来做这件事,效率肯定没问题


[Quote=引用 2 楼 lizhengnan 的回复:]
VB.NET codeDimbuffer(10000)ascharDimioasnewsystem.io.streamreader(Path)
io.ReadBlock(Buffer,0, Buffer.length-1)


[/Quote]

lizhengnan 2008-03-06
  • 打赏
  • 举报
回复
是的,char是UN的,16位,两个字节.
songshp39 2008-03-06
  • 打赏
  • 举报
回复
mark
up
andyalex 2008-03-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lizhengnan 的回复:]
VB.NET code
Dim buffer(10000) as char
Dim io as new system.io.streamreader(Path)
io.ReadBlock(Buffer, 0, Buffer.length - 1)
[/Quote]
Jim3 2008-03-06
  • 打赏
  • 举报
回复
我试了下,速度还是很快的,是不是你读取之后的处理慢?
你测试一下,看看慢在哪里?

byte[] bBuffer = new byte[10000 *2];//{};
UInt16[] iBuffer = new UInt16[10000];
for (int y = 0;y <5000; ++y)
{
fstream.Read(bBuffer, 0, 10000*2);
Buffer.BlockCopy(bBuffer, 0, iBuffer, 0, 10000*2);
}
shally5 2008-03-06
  • 打赏
  • 举报
回复
C#中的char是UN码吗?怎么读进来的不是我要的数值啊!
lizhengnan 2008-03-06
  • 打赏
  • 举报
回复
char型就是占两个字节吗
shally5 2008-03-06
  • 打赏
  • 举报
回复
可是用BYTE读的是单字节啊!我要的是双字节啊

另外:
我已改为如下方法,速度还是太慢了
byte[] bBuffer = new byte[10000 *2];//{};
UInt16[] iBuffer = new UInt16[10000];
for (int y = 0;y<5000; ++y)
{
fstream.Read(bBuffer, 0, 10000*2);
Buffer.BlockCopy(bBuffer, 0, iBuffer, 0, 10000*2);
....使用iBuffer[x]
}
lizhengnan 2008-03-06
  • 打赏
  • 举报
回复

Dim buffer(10000) as char
Dim io as new system.io.streamreader(Path)
io.ReadBlock(Buffer, 0, Buffer.length - 1)


Jim3 2008-03-06
  • 打赏
  • 举报
回复
FileStream.Read(byte[] array,int offset,int count)
就可以啊
从这本书能学到什么?   《Head First C#》是学习面向对象编程、C#和Visual Studio IDE的绝佳途径。这本书是针对你的大脑特别制作的,涵盖C#3.0和Visual Studi0 2008,讲授了从垃圾回收到扩展方法以至双缓冲动画等多方面知识。你还将掌握C#的最的热门语法LINQ,可以用来查询.NET集合、SQL数据库等不同来源的数据。读完这本书,你将成为一名水平高超的C#程序员,完全有能力设计和开发大型应用。   为什么这本书如此与众不同?   我们认为,你的时间如此宝贵,不应过多地浪费在与新概念的斗争中。通过使用认知科学和学习理论的最新研究成果,你将享受一种多感官学习体验,《Head First C#》采用了一种专门为你的大脑而设计的丰富格式娓娓道来,而不是长篇累牍地说教,让你昏昏欲睡。 目录: 引子 1 C#助你快速开发:10分钟(甚至更短时间)内轻松搞定可视化应用 2 都只是代码:幕后的故事 3 对象我们的方向!让代码更合理 4 类型与引用:现在是上午10:00,你知道你的数据在哪儿吗?C#实验室1:赛狗日 5 封装:让你的隐私……属于你个人 6 继承:对象的家庭树 7 接口与抽象类:让类信守承诺 8 枚举与集成:存储大量数据C#实验室2:冒险游戏 9 读写文件:保存了字节数组,就留住了一切 10 异常处理:救火太老套 11 事件与委托:没有你的监视,代码自己在做什么 12 复习与预习:知识,能力,动手实践 13 控件与图片:应用的美化 14 CAPTAIN AMAZING:对象之死

110,533

社区成员

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

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

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