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

wuganxiu 2017-11-04 11:44:19
VB如何删除二进制文件指定的一段数据?比如说,有一个二进制文件1.bin,如何删除第200至300这段数据?
把后面的数据往前面移,文件大的话,这个速度太慢了,一段一段的移,要移好多次,有没有更好的办法
...全文
564 17 打赏 收藏 转发到动态 举报
写回复
用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的文件,都可以一次性的读入内存(读到字节数组内); 在读的时候,“跳过”要删除的区域,然后直接写入新文件、或者把“旧文件清空”再写入。
卷序列号码为 00000030 4489:1826 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ 2.2.4 CONVERT在日期转换中的使用示例.sql │ │ 2.3.3 SET DATEFORMAT对日期处理的影响.sql │ │ 2.3.4 SET LANGUAGE对日期处理的影响示例.sql │ │ 2.4.1 日期格式化处理.sql │ │ 2.4.2 日期推算处理.sql │ │ 2.4.3 特殊日期加减函数.sql │ │ 2.5.1 查询指定日期段内过生日的人员.sql │ │ 2.5.2 生成日期列表的函数.sql │ │ 2.5.3 工作日处理函数(标准节假日).sql │ │ 2.5.3 工作日处理函数(自定义节假日).sql │ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ 任意两个时间之间的星期几的次数-纵.sql │ 复杂年月处理.sql │ 统计--交叉表+日期+优先.sql │ ├─第03章 │ │ 3.2 各种字符串分拆处理函数.sql │ │ 3.3 各种字符串合并处理示例.sql │ │ 3.4.1 分段截取函数.sql │ │ 3.4.2 分段更新函数.sql │ │ 3.4.3 IP地址处理函数.sql │ │ 3.5.1 字符串比较函数.sql │ │ 3.5.2 字符串并集&交集处理示例.sql │ │ 3.5.3 字符串分拆并统计的处理示例.sql │ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例.sql │ │ 3.7.4 text与image字段转换处理示例.sql │ │ 3.7.5 ntext字段的REPLACE处理示例.sql │ │ │ └─其他 │ varbinary转换成字符串.sql │ 关键字搜索.sql │ 分解公式.sql │ 字符串分拆--格式化.sql │ 得到一个字符串在另一个字符串中出现的次数.sql │ 数字转换成十六进制.sql │ 比较第一与第二个字符串,是否有连续的5个字符相同.sql │ 生成查询的模糊匹配字符串.sql │ 简繁转换.sql │ 统计一个表中某个字符出现最多的字母.sql │ 非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音处理中的应用.sql │ │ 4.2.2 排序规则在全角与半角处理中的应用.sql │ │ │ └─其他 │ 生成GB2312汉字表.sql │ 生成GBK汉字表.sql │ 自动获取汉字笔画.sql │ ├─第05章 │ │ 5.1.1 SET IDENTITY_INSERT 中的几个问题.sql │ │ 5.1.1 修改标识值的示例.sql │ │ 5.1.1 标识列与普通列互相转换的示例.sql │ │ 5.2.1 查表法按日期生成流水号的示例.sql │ │ 5.2.1 查表法生成流水号的示例.sql │ │ 5.2.2 使用编号表按日期生成流水号的示例.sql │ │ 5.2.2 使用编号表生成流水号的示例.sql │ │ 5.2.3 生成纯字母随机编号的示例(仅大小或者小写).sql │ │ 5.2.3 生成纯字母随机编号的示例(大小写混合).sql │ │ 5.2.3 生成纯数字随机编号的示例.sql │ │ 5.3.2 融合了补号处理的编号生成处理示例.sql │ │ 5.3.3 使用UPDATE进行编号重排的处理示例.sql │ │ 5.3.3 使用临时表进行编号重排的处理示例.sql │ │ 5.3.3 使用子查询进行编号重排的处理示例.sql │ │ 5.3.3 名次查询的处理示例.sql │ │ 5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例.sql │ │ 5.4.4 缺勤天数统计的处理示例.sql │ │ │ └─其他 │ -补位法.sql │ 以另一个表的字段做默认值.sql │ 以另一表的字段生成编号.sql │ 关联部门流水号.sql │ 十六进制.sql │ 学号.sql │ 开票统计--涉及到连号处理.sql │ 新编号查询示例(分类查询).sql │ 新编号查询示例.sql │ 日期流水号.sql │ 材料流水号.sql │ 流水号.sql │ 箱编号连号处理.sql │ 类别自动生成编号示例.sql │ 自已做标识列的例子.sql │ 触发器自动维护已用&未用编号.sql │ 连续编号.sql │ 防止重复的示例.sql │ 项目编号=各项目独立流水号&各年不同.sql │ ├─第06章 │ │ 6.1.1 NULL对IN的查询的影响及解决示例.sql │ │ 6.1.2 各种联接的使用示例.sql │ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(定义各汇总列标题).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序及汇总列标题处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例.sql │ │ 6.2.1 UNION ALL实现的分级汇总示例.sql │ │ 6.3.1 简单的交叉报表处理示例.sql │ │ 6.3.2 多列转换为行的交叉报表处理示例.sql │ │ 6.3.3 行值动态变化的交叉报表处理示例(转换多列).sql │ │ 6.3.3 行值动态变化的交叉报表处理示例.sql │ │ 6.3.4 化解字符串不能超过8000的方法.sql │ │ 6.3.5 特殊的交叉报表处理示例.sql │ │ 6.4.1 库存明细帐处理示例(包含结存数).sql │ │ 6.4.1 库存明细帐处理示例.sql │ │ 6.4.2 同期及上期数据对比处理示例.sql │ │ 6.4.3 动态分组处理示例.sql │ │ 6.4.4 排行榜处理示例.sql │ │ │ └─其他 │ 交叉表--复杂名次.sql │ 交叉表-优先级处理.sql │ 交叉表分析.sql │ 分级汇总.sql │ 分组交叉表.sql │ 列转行.sql │ 固定行列报表.sql │ 复杂交叉表.sql │ 复杂交叉表1.sql │ 多栏显示.sql │ 日期+星期+时间.sql │ 格式化报表.sql │ 横转竖-1.sql │ 横转竖-字段名.sql │ 横转竖-生成字段名.sql │ 横转竖.sql │ 行列互换的复杂交叉表.sql │ 限制列数的交叉表.sql │ ├─第07章 │ │ 7.1 splitpage.asp │ │ 7.2.1 TOP n 实现的通用分页存储过程.sql │ │ 7.2.2 字符串缓存实现的通用分页存储过程.sql │ │ 7.2.3 临时表缓存实现的通用分页存储过程.sql │ │ 7.2.4 使用系统存储过程实现的通用分页存储过程.sql │ │ 7.3.1 实现随机分页的通用分页存储过程.sql │ │ 7.3.2 根据分类表实现的分页存储过程.sql │ │ │ └─其他 │ sp_cursor.sql │ 基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则调整处理的通用存储过程.sql │ │ 8.1.4 生成编码规则调整处理T-SQL语句的函数.sql │ │ 8.1.5 删除节点处理的通用存储过程.sql │ │ 8.1.5 移动节点处理的通用存储过程.sql │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ 8.2.2 树形数据广度排序处理示例.sql │ │ 8.2.2 树形数据深度排序处理示例(模拟单编号法).sql │ │ 8.2.2 树形数据深度排序处理示例(递归法).sql │ │ 8.2.3 查找指定节点的所有子节点的示例函数.sql │ │ 8.2.4 查找指定节点的所有父节点的示例函数.sql │ │ 8.2.5 校验插入指定结点是否导致编码循环的示例函数.sql │ │ 8.2.5 校验表中数据是否有循环编码的通用存储过程.sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例.sql │ │ 8.2.7 实现删除指定结点及所有子节点的处理触发器.sql │ │ 8.2.8 逐级汇总示例(循环逐级累计法).sql │ │ 8.2.8 逐级汇总示例(用户定义函数法).sql │ │ 8.3.1 产品配件清单查询示例.sql │ │ 8.3.2 最短乘车路线查询示例.sql │ │ │ └─其他 │ xml菜单.sql │ 宝塔形数据的处理-1.sql │ 宝塔形数据的处理.sql │ 树形数据生成xml.sql │ ├─第09章 │ │ 9.1.3 访问外部数据源方法总结.sql │ │ 9.5.1 二进制文件存取示例(T-SQL).sql │ │ 9.5.1 二进制文件存取示例(VB&VBA).vbs │ │ a.txt │ │ Schema.ini │ │ │ └─其他 │ bcp-数据导入导出(全).sql │ bcp-数据导入导出-二进制文件.sql │ bcp-数据导出为文件.sql │ bcp表数据存为XML.sql │ SQL Server到Oracle连接服务器的实现.sql │ SQL Server到SQLBASE连接服务器的实现.sql │ SQL Server到SYBASE连接服务器的实现.sql │ sql导出mysql.sql │ textcopy实现文件存取.sql │ Vb程序实现文件存取.sql │ 导入文本文件时如何指定字段类型.sql │ 导出northwind中Employees的图像.sql │ 将某个目录上的Excel表,导入到数据库中.sql │ 数据导入导出基本方法.sql │ 用ASP上传&下载文件.sql

7,763

社区成员

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

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