关于C#如何快速定位到二进制文件中的某一位置

其实一般的二进制文件用BinaryReader不断读取并用条件判断是否是我所需要的内容的确很快,但是如果碰到几百兆的大文件,偏偏需要的数据又在很靠后的位置,那么读取速度就... 其实一般的二进制文件用BinaryReader不断读取并用条件判断是否是我所需要的内容的确很快,但是如果碰到几百兆的大文件,偏偏需要的数据又在很靠后的位置,那么读取速度就很慢了,我希望能在搜索效率上提升,麻烦懂得高手教教我,要是有代码示例就更好了~~谢谢~~

或者,如果没有有效办法的话,我希望可以知道,如何使BinaryReader的指针快速移动指定数量的字节,但不读取文件内容(因为读取会占用时间)??谢谢~
展开
 我来答
zhenxin0603
2013-12-17 · TA获得超过600个赞
知道小有建树答主
回答量:600
采纳率:100%
帮助的人:451万
展开全部
用 BinaryReader 的 BaseStream.Seek(pos, SeekOrigin.Begin);

pos为文件开头开始计算的字节数,从0开始
更多追问追答
追问
你要从0计算,问题是我根本不知道要移动多少,而且不想计数,想直接让指针从当前位置往后移动N位,应该怎么写呢?
追答
用 BaseStream.Seek(N, SeekOrigin.Begin); 就行啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

推荐于2017-09-05 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
FileStream本身有seek方法可以直接移到需要的位置,这是从最早的c就有的东西。
追问
你这个方法只能由程序指定移动到哪里?问题是我根本不知道要移动多少。如果我的BinaryReader指针已经移动过了,想直接让指针从当前位置往后移动N位,应该怎么写呢?
追答
你原本只要查一下这个函数说明就能看到
public override long Seek(
long offset,
SeekOrigin origin
)
offset
类型:System.Int64
相对于 origin 的点,从此处开始查找。
origin
类型:System.IO.SeekOrigin
使用 SeekOrigin 类型的值,将开始位置、结束位置或当前位置指定为 origin 的参考点。

当前位置就是SeekOrigin.Current,指定不同的offset就行了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式