Check if a file is open from another process

前端 未结 2 1530
粉色の甜心
粉色の甜心 2021-01-20 09:31

How do I check if a file is already used by another process from Powerscript ?

2条回答
  •  伪装坚强ぢ
    2021-01-20 09:58

    The best way that I found is to call the WinAPI CreateFile to open a given file in exclusive mode.

    First, declare the following Local External Function (PB10)

    FUNCTION Long CreateFile(ref string lpszName, long fdwAccess, long fdwShareMode, long lpsa, &
    long fdwCreate, long fdwAttrsAndFlags, long hTemplateFile) LIBRARY "Kernel32.dll" &
    ALIAS FOR "CreateFileA;Ansi"
    FUNCTION boolean CloseHandle (long file_hand) LIBRARY "KERNEL32.DLL"
    

    then from Powerscript :

    CONSTANT ulong GENERIC_ACCESS = 268435456  //  &H10000000
    CONSTANT ulong EXCLUSIVE_ACCESS = 0
    CONSTANT ulong OPEN_EXISTING = 3
    
    long ll_handle
    String ls_file 
    
    ls_file = "c:\temp\myfile.xls"
    
    ll_handle = CreateFile ( ls_file, GENERIC_ACCESS, EXCLUSIVE_ACCESS,  0, OPEN_EXISTING, 0, 0) 
    IF ll_handle < 1 THEN 
        MessageBox("", "Can't open, maybe missing or already opened ?!?")
    ELSE
        MessageBox("","File can be opened")
    END IF
    
    CloseHandle(ll_handle)
    

提交回复
热议问题