各位大虾,我再用GetFileSize函数得到本地文件大小时,出现一个怪问题,问题是第一次运行代码时,能正确得到文件的大小,第二次运行时hOrgFile就等于-1了,于是nSize=0,如果重新启动机子有能够得到文件大小,我觉得是不是CreateFile使用不当? 请帮我看看是怎么一回事.我附上代码,代码很简单。(马上给分)
Option Explicit
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 GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As LongPrivate Const GENERIC_READ = &H80000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3Private Sub Command4_Click()
Dim hOrgFile As Long
Dim nSize As Long hOrgFile = CreateFile("c:\test.txt", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) nSize = GetFileSize(hOrgFile, 0)
End Sub
Option Explicit
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 GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As LongPrivate Const GENERIC_READ = &H80000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3Private Sub Command4_Click()
Dim hOrgFile As Long
Dim nSize As Long hOrgFile = CreateFile("c:\test.txt", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) nSize = GetFileSize(hOrgFile, 0)
End Sub
hOrgFile=IOPEN("c:\test.txt", READ_WRITE)
试一试吧
Dim rfso As New FileSystemObject rfso.CreateTextFile "c:\test.txt", True, False
nSize = rfso.GetFile("c:\test.txt").Size
MsgBox nSize
不存在就有问题
就是说文件必须存在的意思
就是如果不存在则创建