各位大虾,我再用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

解决方案 »

  1.   

    用IOPEN
     hOrgFile=IOPEN("c:\test.txt", READ_WRITE)
    试一试吧
      

  2.   

    那么费劲,用FileSystemObject吧
    Dim rfso As New FileSystemObject    rfso.CreateTextFile "c:\test.txt", True, False
        
        nSize = rfso.GetFile("c:\test.txt").Size
        MsgBox nSize
      

  3.   

    如果c:\test.txt存在就没问题
    不存在就有问题
      

  4.   

    工程引用中加上Microsoft Scripting Runtime
      

  5.   

    因为Private Const OPEN_EXISTING = 3
    就是说文件必须存在的意思
      

  6.   

    把 OPEN_EXISTING = 4(OPEN_ALWAYS)
    就是如果不存在则创建
      

  7.   

    加一行代码,就不会有问题了CloseHandle hOrgFileCloseHandle也是API,你用API浏览器加入它的声明吧
      

  8.   

    //CloseHandle hOrgFile同意另外,用filelen函数也可得到文件长度