找回密码
 加入
搜索
查看: 4259|回复: 9

[系统综合] 怎么判断一个文件是否处于使用中

  [复制链接]
发表于 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
发表于 2011-6-22 10:54:37 | 显示全部楼层
为什么用的是XLS ,如果是txt不知道好用不好用,
上面的代码我不会写,牵扯到dll调用了吧?
我判断一个文件是否使用中的方法是重命名,如果成功就是没被占用否则就是被占用状态
 楼主| 发表于 2011-6-23 09:43:29 | 显示全部楼层
回复 2# love5173

谢谢,看来目前,只能学您的用法了
发表于 2011-6-23 09:58:10 | 显示全部楼层
回复 3# xwlzx
如果是xls的话 用open就可以了,写入模式,能打开就是没被占用,重命名的话如果是自己用还好,如果是公共文件会影响别人用
 楼主| 发表于 2011-6-23 15:23:04 | 显示全部楼层
回复 4# love5173
是的,我现在就是用OPEN判断的,谢谢
发表于 2011-6-23 19:14:00 | 显示全部楼层
excel文件的话,直接objget("excel.application"),然后枚举全部打开的工作簿全路径名,与指定文件全路径名对比,不过如果存在多个excel进程的话,还是有点麻烦。
发表于 2011-6-26 21:53:56 | 显示全部楼层
有一种不用VBA判断XLS文件是否打开的方法。
判断当前打开的XLS文件同级目录下,是否存在一个以~$开头的文件名相同的XLS文件。
该文件是XLS临时文件,是隐藏状态,需要把“文件夹选项”=>“查看”=>“显示所有文件和文件夹”选项打开才可以看到。
发表于 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

試試看吧...
 楼主| 发表于 2011-6-27 18:48:30 | 显示全部楼层
回复 8# rchockxm

谢谢!
发表于 2011-7-10 14:23:01 | 显示全部楼层
8#的还不错 试试
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 03:31 , Processed in 0.078515 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表