请问如何动态读取二进制文件?

kelerfang 2009-07-28 04:56:41
工作需要,得读二进制文件,解析后显示出来,目前使用DATATABLE加DATAGRIDVIEW实现,问题是如果文件内容很多的话读取起来很慢,也很耗内存。想实现一次只加载一部分内容,当拖动滚动条时自动加载一部分,直到滚动条到底部。。。目前没有头绪,请大侠们给个思路,要有例子更好
...全文
136 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kelerfang 2009-07-29
  • 打赏
  • 举报
回复
多谢10楼的大大,老实说没看太明白,麻烦讲解下
gaijf 2009-07-28
  • 打赏
  • 举报
回复
ding
wuyq11 2009-07-28
  • 打赏
  • 举报
回复
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"";

byte[] rawSymbolStore = loadFile(path);
string x = "";
int ArraySize = new int();
ArraySize = rawSymbolStore.GetUpperBound(0);
System.Text.Encoding en = System.Text.Encoding.UTF8;
x = en.GetString(rawSymbolStore,0,ArraySize);
x = "";
}

private byte[] loadFile(string filename)
{
FileStream fs = new FileStream(filename, FileMode.Open);
byte[] buffer = new byte[(int) fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
return buffer;
}

BinaryReader brMyfile= new BinaryReader (fsMyfile);
brMyfile.BaseStream.Seek(0, SeekOrigin.Begin);
Byte b1;
while(brMyfile.PeekChar()>-1)
{
b1=brMyfile.ReadByte();
if(b1 != 13 && b1 != 10)
{
Console.Write("{0}",b1.ToString());
}
else
{
Console.WriteLine();
}
}
Console.WriteLine("\n");
古今多少事 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 a854468521 的回复:]
帮顶,得做饭了!
[/Quote]

亲自做饭?……呵呵,我也一样……
a854468521 2009-07-28
  • 打赏
  • 举报
回复
帮顶,得做饭了!
kelerfang 2009-07-28
  • 打赏
  • 举报
回复
有没有例子程序什么的,有想法但是没头绪
北京的雾霾天 2009-07-28
  • 打赏
  • 举报
回复
唉,看来你的算法是很复杂了,大的思路有了,你慢慢调吧。
kelerfang 2009-07-28
  • 打赏
  • 举报
回复
3楼的可以贴出来些研究研究
kelerfang 2009-07-28
  • 打赏
  • 举报
回复
回1楼,是打算每次就读一部分,我的一个90M的文档,解析后有200多万条数据,问题是没什么头绪
回2楼, Dim fs As New IO.FileStream(Me.Text, IO.FileMode.Open)
Dim bf As New IO.BinaryReader(fs)
是用FILESTREAM读,问题是我文件里每条数据的长度不固定,头9个字节固定,第九个字节的内容表示之后还需要多少个字节
messi_yang 2009-07-28
  • 打赏
  • 举报
回复
我做的二进制是图片跟二进制的转换的
楼主如果要的话 。我可以贴出来··
北京的雾霾天 2009-07-28
  • 打赏
  • 举报
回复
可以使用FileStream来读,也可以使用它来定位读取位置,比如:

FileStream fs = new FileStream(path, FileAccess.Read);
fs.Seek(lastPosition, SeekOrigin.Begin);
byte[] bts = new byte[1024 * 10];
int count=fs.Read(bts, 0, bts);
fs.Close();

北京的雾霾天 2009-07-28
  • 打赏
  • 举报
回复
觉得你最好做一个分页,不必非得要做成懒加载。每次读一部分,下一次从上一次的最后位置开始读相同的记录条数。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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