VC声明 DWORD SetFilePointer( HANDLE hFile, // 文件句柄 LONG lDistanceToMove, // 偏移量(低位) PLONG lpDistanceToMoveHigh, // 偏移量(高位) DWORD dwMoveMethod // 基准位置FILE_BEGIN:文件开始位置 FILE_CURRENT:文件当前位置 FILE_END:文件结束位置
解决方案 »
- OCX控件弹出多个子窗口,后台鼠标消息如何避免被不断激活!
- ACCESS如何提高NOT EXISTS的查询速度!期待老鸟!
- vb关于文本文件操作
- 想通过调用一个函数返回一个ado记录集,是用参数返回记录集好呀?还是用函数的返回值返回好呀?
- 关于vb自带的报表
- 将文件夹中文件导入ACCESS?
- 在一个程序中比如文本框有很多查询条件的实现方法?
- 有谁能提供有关Crystal Report控件的资料啊?急
- 怎样将JPEG格式的二进制数据放到Picture控件中
- VB中的Project Explorer中右键移去文件的功能怎么没有了
- vb 读取 excel 表格的数据放到 TEXT1.TEXT
- 视频录像软件
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long【操作系统】
Win9X:Yes
WinNT:Yes
【说明】
在一个文件中设置当前的读写位置
【返回值】
Long,返回一个新位置,它采用从文件起始处开始算起的一个字节偏移量。HFILE_ERROR意味着出错。会设置GetLastError
【其它】
这个函数与vb的seek语句类似。不要将函数用于通过vb的open命令打开的文件。利用这个函数,可以处理那些长度大于2^64字节的大型文件
【参数表】
hFile ---------- Long,系统文件句柄
lDistanceToMove - Long,字节偏移量
lpDistanceToMoveHigh - Long,指定一个长整数变量,其中包含了要使用的一个高双字偏移。可设为零(将声明变为ByVal),表示只使用lDistanceToMove
原文:A long variable containing a high double word offset to use. May be zero (change
declaration to ByVal) to use only lDistanceToMove.
dwMoveMethod --- Long,下述常数之一
FILE_BEGIN
lOffset将新位置设为从文件起始处开始算的起的一个偏移
FILE_CURRENT
lOffset将新位置设为从当前位置开始计算的一个偏移
FILE_END
lOffset将新位置设为从文件尾开始计算的一个偏移
'Example Name:Read and Write
Const MOVEFILE_REPLACE_EXISTING = &H1
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_BEGIN = 0
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const CREATE_NEW = 1
Const OPEN_EXISTING = 3
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Private Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Private Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal dwFlags As Long) As Long
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Dim sSave As String, hOrgFile As Long, hNewFile As Long, bBytes() As Byte
Dim sTemp As String, nSize As Long, Ret As Long
'Ask for a new volume label
sSave = InputBox("Please enter a new volume label for drive C:\" + vbCrLf + " (if you don't want to change it, leave the textbox blank)")
If sSave <> "" Then
SetVolumeLabel "C:\", sSave
End If 'Create a buffer
sTemp = String(260, 0)
'Get a temporary filename
GetTempFileName "C:\", "KPD", 0, sTemp
'Remove all the unnecessary chr$(0)'s
sTemp = Left$(sTemp, InStr(1, sTemp, Chr$(0)) - 1)
'Set the file attributes
SetFileAttributes sTemp, FILE_ATTRIBUTE_TEMPORARY
'Open the files
hNewFile = CreateFile(sTemp, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
hOrgFile = CreateFile("c:\config.sys", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) 'Get the file size
nSize = GetFileSize(hOrgFile, 0)
'Set the file pointer
SetFilePointer hOrgFile, Int(nSize / 2), 0, FILE_BEGIN
'Create an array of bytes
ReDim bBytes(1 To nSize - Int(nSize / 2)) As Byte
'Read from the file
ReadFile hOrgFile, bBytes(1), UBound(bBytes), Ret, ByVal 0&
'Check for errors
If Ret <> UBound(bBytes) Then MsgBox "Error reading file ..." 'Write to the file
WriteFile hNewFile, bBytes(1), UBound(bBytes), Ret, ByVal 0&
'Check for errors
If Ret <> UBound(bBytes) Then MsgBox "Error writing file ..." 'Close the files
CloseHandle hOrgFile
CloseHandle hNewFile 'Move the file
MoveFileEx sTemp, "C:\KPDTEST.TST", MOVEFILE_REPLACE_EXISTING
'Delete the file
DeleteFile "C:\KPDTEST.TST"
Unload Me
End Sub
wz1 = SetFilePointer(a, 0, 0&, FILE_END)
dim i as long
dim j as long
open "A.dat" for output as #1
for i=1 to 10000
for j=1 to 1000000
print #1,"A";
next
next
close #1
Dim I As Double, HiLong As Long, LoLong As Long
I = 8590060070# '访问的字节
HiLong = I / 4294967296#
LoLong = I - HiLong * 4294967296#
Debug.Print Hex(HiLong), Hex(LoLong)
End Sub
这样试下.
位置用DOUBLE存储,使用时还原为高低LONG.