xwlzx 发表于 2011-6-22 09:28:40

怎么判断一个文件是否处于使用中

怎么判断一个文件是否处于使用中,可否将下面代码用AU3写出来,谢谢!Private Declare Function lOpen()Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
    Private Declare Function lClose()Function lClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long

    '       判断某文件是否在使用中      
    Public Function IsFileAlreadyOpen()Function IsFileAlreadyOpen(ByVal FileName As String) As Boolean
      Dim hFile As Long
      Dim lastErr As Long
      hFile = -1                                                                                  '       初始化文件句柄.      
      lastErr = 0
      hFile = lOpen(FileName, &H10)

      If hFile = -1 Then                                                                     '       文件是否能正确打开并可共享      
            lastErr = Err.LastDllError
      Else
            lClose(hFile)
      End If
      IsFileAlreadyOpen = (hFile = -1) And (lastErr = 32)
    End Function

    Private Sub Command1_Click()Sub Command1_Click()
      Dim strFileName As String
      strFileName = "d:\050304_chengji.xls"                   '       你的文件      
      If IsFileAlreadyOpen(strFileName) Then
            MsgBox("指定文件已打开")
      Else
            MsgBox("指定文件未打开")
      End If
    End Sub

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zy227/archive/2008/01/16/2046856.aspx

love5173 发表于 2011-6-22 10:54:37

为什么用的是XLS ,如果是txt不知道好用不好用,
上面的代码我不会写,牵扯到dll调用了吧?
我判断一个文件是否使用中的方法是重命名,如果成功就是没被占用否则就是被占用状态

xwlzx 发表于 2011-6-23 09:43:29

回复 2# love5173

谢谢,看来目前,只能学您的用法了

love5173 发表于 2011-6-23 09:58:10

回复 3# xwlzx
如果是xls的话 用open就可以了,写入模式,能打开就是没被占用,重命名的话如果是自己用还好,如果是公共文件会影响别人用

xwlzx 发表于 2011-6-23 15:23:04

回复 4# love5173
是的,我现在就是用OPEN判断的,谢谢

kevinch 发表于 2011-6-23 19:14:00

excel文件的话,直接objget("excel.application"),然后枚举全部打开的工作簿全路径名,与指定文件全路径名对比,不过如果存在多个excel进程的话,还是有点麻烦。

pengmo 发表于 2011-6-26 21:53:56

有一种不用VBA判断XLS文件是否打开的方法。
判断当前打开的XLS文件同级目录下,是否存在一个以~$开头的文件名相同的XLS文件。
该文件是XLS临时文件,是隐藏状态,需要把“文件夹选项”=>“查看”=>“显示所有文件和文件夹”选项打开才可以看到。

rchockxm 发表于 2011-6-26 22:33:33

作者 Yashied
Func _WinAPI_FileInUse($sFile)

        Local $hFile = _WinAPI_CreateFileEx($sFile, 3, 0x80000000, 0)

        If $hFile Then
                _WinAPI_CloseHandle($hFile)
                Return 0
        EndIf

        Local $Error = _WinAPI_GetLastError()

        Switch $Error
                Case 32 ; ERROR_SHARING_VIOLATION
                        Return 1
                Case Else
                        Return SetError($Error, 0, 0)
        EndSwitch
EndFunc   ;==>_WinAPI_FileInUse

試試看吧...

xwlzx 发表于 2011-6-27 18:48:30

回复 8# rchockxm

谢谢!

ayumi502 发表于 2011-7-10 14:23:01

8#的还不错 试试
页: [1]
查看完整版本: 怎么判断一个文件是否处于使用中