怎么判断一个文件是否正被别的进程操作(100分)

  • 主题发起人 主题发起人 DeepOcean
  • 开始时间 开始时间
D

DeepOcean

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样的API吗?
 
你可以试着更改一下它的名称,<br>得用Try ... Except 语句。
 
function IsFileInUse(fName : string) : boolean; <br>var <br>HFileRes : HFILE; <br>begin <br>Result := false; <br>if not FileExists(fName) then <br>exit; <br>HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, <br>0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); <br>Result := (HFileRes = INVALID_HANDLE_VALUE); <br>if not Result then <br>CloseHandle(HFileRes); <br>end; <br>
 
以写的方式打开文件<br>打不开的话就是正在被使用
 
THANKS,经过实验该程序运行良好<br>我想问一个问题,<br>HFileRes = INVALID_HANDLE_VALUE<br>我从MSDN没有找到改语句的说明<br>能告诉我你是如何知道当CreateFile返回值是 INVALID_HANDLE_VALUE<br>的时候就表示该文件正在使用吗?<br>(我对MSDN的帮助用得很少)
 
不就在msdn里吗?<br>Return Values<br>If the function succeeds, the return value is an open handle to the specified file. If the specified file exists before the function call and dwCreationDisposition is CREATE_ALWAYS or OPEN_ALWAYS, a call to GetLastError returns ERROR_ALREADY_EXISTS (even though the function has succeeded). If the file does not exist before the call, GetLastError returns zero. <br><br>If the function fails, the return value is &lt;Font Color=#FF0000&gt;INVALID_HANDLE_VALUE&lt;/font&gt;. To get extended error information, call GetLastError. <br><br>
 
多人接受答案了。
 
后退
顶部