vba - 从 VB6/VBA/VBScript 读取大型二进制文件
问题描述
我试图让一个老式的 VB6 应用程序来读取一个大(大于 2GB)的二进制文件。我将缓冲区声明为:
Dim TCBuffer as String
TCPBuffer = String(4096, Chr(0))
并使用以下方法循环读取数据:
Get #FileNum, , TCPBuffer
但是一旦当前位置达到 2GB,上面的行就会引发错误。
运行时错误“63”:
不良记录编号
所以我想知道使用它Scripting.FileSystemObject
。但是,这个对象似乎非常有限。一方面,您似乎只能创建和打开文本文件。
关于如何从 VB6 读取大型二进制文件的任何建议?
更新:
再考虑一下,另一种选择是使用 API 函数。但这里 VB6 的真正限制之一是缺少无符号数据类型。所以即使使用 API 函数也是一个技巧。
解决方案
我最终创建了一个在内部使用 Windows API 的文件类。
任何接受或返回文件大小或偏移量的函数都是Double
. 一小段代码将该值与无符号长整数进行转换,即使它在Long
传递给 API 时必须以有符号形式存储(因为 VB6/VBA 不支持无符号长整数)。
推荐阅读
- android - 安卓最大。自定义通知的大小
- php - 不允许将表达式作为字段默认值(在 oop 上)
- r - 如何防止我的 Shiny App 在开源闪亮服务器中断开连接?
- angular - 用于生产的 Angular 构建失败
- laravel-routing - 路由:如何将路由应用于除一个以外的所有域
- java - 在 onMessageReceived() 中执行操作 - Firebase 云消息传递
- c# - 使用 IOptions 注入问题初始化类
- html - 如何根据xslt中子元素标签的属性为标签添加属性
- excel - VBA - 检查范围是否已填充,然后生成 PDF
- ocaml - 未实现的 Javascript 原语 caml_pure_js_expr(再次)