vb 如何写一个大于2G的文件 请教高手
如何写一个大于2G的文件,请教高手,谢谢
[解决办法]
内存映象文件
[解决办法]
写不了大于2G的文件吗?
我没试过,但应该可以呀!虽然一个string类型的最大大约2G,但是,你可以写2个2G的字符型到文件!或者...不停地写其它小字符,直到大于2G,close
[解决办法]
一次不要写太多了,否则一是很慢,二是比较容易写入失败。
非得要一次写入也不是不可以,不过要看你的写入方式。
据我所知写字符串时,一次写入64K以上就比较有可能出错。
建议如下:
1)OPEN文件;
2)写一定数量的字符到该文件;
3)CLOSE;
4)重复上面第一到第三步,直到满足你设定的条件。
[解决办法]
用 OPEN 的方法不可能操作大于 2G 的文件。
因为 VB 的 LONG 是有符号的,无论是 PUT、GET、SEEK后面都是跟 LONG ,所以最大只能到 2G。
解决方法是采用 CreateFile 实现。请参阅 API
相关 API 为:
CreateFile
SetFilePointer
WriteFile
ReadFile
CloseHandle
注意:SetFilePointer 类似于 VB 的 SEEK ,SetFilePointer 后面同样带 LONG 类型,但是
SetFilePointer 支持连续定位。
比如,在 VB 中
Seek #filenum,100
Seek #filenum,100
2次 SEEK 到 文件 100 位置,效果同一次一样。
'移动文件到指定位置,SeekNewPointer 函数
'选择定位的类型
'传递文件句柄(必须)
'传递文件新指针位置(可选,如果没有传递,则表示移动到该文件第一个字节)
Public Sub SeekNewPointer(FileHwnd As Long, SeekType As SeekFileType, Optional NewPointer As Double = 0)
'FILE_CURRENT 参数表示从当前文件
Dim i As Long
'设置基本 SEEK 单位
Dim BasicSeek As Long
'设置为 1G
BasicSeek = &H40000000
If FileHwnd > 0 Then
'如果定位超过 1G,那么就分开定位
' 1G 为 &H40000000
If NewPointer > BasicSeek Then
For i = 1 To CLng(NewPointer / BasicSeek)
NewPointer = NewPointer - BasicSeek
SetFilePointer FileHwnd, BasicSeek, 0, SeekType
Next
'如果存在余数
If NewPointer > 0 Then SetFilePointer FileHwnd, NewPointer, 0, SeekType
Else
'如果定位小于 1G
'就直接定位
SetFilePointer FileHwnd, NewPointer, 0, SeekType
End If
End If
End Sub
[解决办法]
可以直接用PUT语句,分段写