VB如何删除二进制文件指定的一段数据?谢谢

wuganxiu 2017-11-04 11:44:19
VB如何删除二进制文件指定的一段数据?比如说,有一个二进制文件1.bin,如何删除第200至300这段数据?
把后面的数据往前面移,文件大的话,这个速度太慢了,一段一段的移,要移好多次,有没有更好的办法
...全文
590 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-13
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。http://bbs.csdn.net/topics/391975224
of123 2017-11-10
  • 打赏
  • 举报
回复
大文件读入数组,实际上是进入了虚拟内存,也就是 VB 在硬盘上开辟的缓冲区。由于涉及到磁盘访问,会有延迟。或者说,是多读写了一轮。 这样的大段删除操作,更快的是打开两个文件,一个输入(源文件),一个输出(临时空文件),只有一读一写。 例如,首先从输入源文件中读取要删除的段落之前的内容,写入新文件。然后,源文件跳到要删除的段落之后读取,再一次或多次写入新文件。 关闭两个文件后,删除源文件,将新文件改名为源文件名。
赵4老师 2017-11-09
  • 打赏
  • 举报
回复
引用 14 楼 Chen8013 的回复:
[quote=引用 12 楼 zhao4zhong1 的回复:] 要删除200到300之间的字节: 将1到199保存到文件A,将301到文件末尾所有内容保存到文件B 最后 Shell "cmd /c copy /b A+B C",vbHide 文件C即所求。
你这样处理方法,文件A、B就不删除了??? MD,现在的很多APP就是只知道制造垃圾、从来不清理场地! 就是你这样的“只知道拉屎、从来不擦屁股”的人太多了………… [/quote] 不要企图优雅的结束(因为这是不可能办到的) 而要在烂的不能再烂的摊子上也能重整河山! 虎头蛇尾是俗人的习惯, 有始有终是君子的操守。
赵4老师 2017-11-08
  • 打赏
  • 举报
回复
要删除200到300之间的字节: 将1到199保存到文件A,将301到文件末尾所有内容保存到文件B 最后 Shell "cmd /c copy /b A+B C",vbHide 文件C即所求。
舉杯邀明月 2017-11-08
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
要删除200到300之间的字节: 将1到199保存到文件A,将301到文件末尾所有内容保存到文件B 最后 Shell "cmd /c copy /b A+B C",vbHide 文件C即所求。
你这样处理方法,文件A、B就不删除了??? MD,现在的很多APP就是只知道制造垃圾、从来不清理场地! 就是你这样的“只知道拉屎、从来不擦屁股”的人太多了…………
舉杯邀明月 2017-11-08
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
要删除200到300之间的字节: 将1到199保存到文件A,将301到文件末尾所有内容保存到文件B 最后 Shell "cmd /c copy /b A+B C",vbHide 文件C即所求。
简直就是“脱了裤子再放屁” !!!
舉杯邀明月 2017-11-07
  • 打赏
  • 举报
回复
用不着“删除文件”,按我在4楼说的方法进行一次“清空操作”即可。
舉杯邀明月 2017-11-07
  • 打赏
  • 举报
回复
引用 7 楼 wuganxiu 的回复:
任意读文件,写文件都可以,清空文件都可以了 就是删除中间一段文件,比如删除第200至300这段数据(共100个) 我就把第300后面的数据移动到第200这个位置,燃生成的数据大小没有改变,原因是数据虽然往前面移了,但是要删掉最后面的100个数据, 如何删除最后面的100个数据呢
很明显的就是,你在“重写文件数据”之前,并没有把文件“清空” !!!
脆皮大雪糕 2017-11-06
  • 打赏
  • 举报
回复
引用 7 楼 wuganxiu 的回复:
任意读文件,写文件都可以,清空文件都可以了 就是删除中间一段文件,比如删除第200至300这段数据(共100个) 我就把第300后面的数据移动到第200这个位置,燃生成的数据大小没有改变,原因是数据虽然往前面移了,但是要删掉最后面的100个数据, 如何删除最后面的100个数据呢
读取N-100个数据,然后覆盖写回去,或者删掉源文件,写一个新的回去
wuganxiu 2017-11-06
  • 打赏
  • 举报
回复
任意读文件,写文件都可以,清空文件都可以了
就是删除中间一段文件,比如删除第200至300这段数据(共100个)
我就把第300后面的数据移动到第200这个位置,燃生成的数据大小没有改变,原因是数据虽然往前面移了,但是要删掉最后面的100个数据,
如何删除最后面的100个数据呢
脆皮大雪糕 2017-11-06
  • 打赏
  • 举报
回复
引用 2 楼 wuganxiu 的回复:
VB如何清空当前文件的所有数据,比如1.bin文件,只是把文件内容快速清空
删掉这个文件,然后open 1.bin for output as #1 再立即close #1 创建一个空间文件。
  • 打赏
  • 举报
回复
二进制方式 读写即可 你文件多大?
  • 打赏
  • 举报
回复
楼上不是说了 用 SetEndOfFile 这个api 截断文件后面的多余空间
舉杯邀明月 2017-11-05
  • 打赏
  • 举报
回复
引用 2 楼 wuganxiu 的回复:
VB如何清空当前文件的所有数据,比如1.bin文件,只是把文件内容快速清空
我一般是用的 Open FileName for output as #1: close #1 3楼说的那个API方法也可以,但还要配合另外的“打开文件”的API才行,   这个API需要的“文件句柄”参数,必须用OpenFile( ) 或CreateFile( )返回的句柄。
笨狗先飞 2017-11-05
  • 打赏
  • 举报
回复
SetEndOfFile 用这个API函数
wuganxiu 2017-11-04
  • 打赏
  • 举报
回复
VB如何清空当前文件的所有数据,比如1.bin文件,只是把文件内容快速清空
舉杯邀明月 2017-11-04
  • 打赏
  • 举报
回复
文件数据要“移动”,肯定得重写一遍文件。 如果文件“很大”,花费较长时间,那是必然的。 以现在的“硬件资源水平”来说,几百MB甚至上GB的文件,都可以一次性的读入内存(读到字节数组内); 在读的时候,“跳过”要删除的区域,然后直接写入新文件、或者把“旧文件清空”再写入。

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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