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去读文件的,太慢了,有好的快速方法吗?多谢!

...全文
552 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)
就可以啊

111,092

社区成员

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

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

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