实际上,可以枚举当前所有进程的所有模块,查找是否有这个文件被使用,但是我不知道是否有文件被使用,但是却在所有进程的所有模块中没有此文件!
你可以试试,如果采用这种方法你需要使用以下函数:(可以在msdn中查找详细帮助)
EnumProcesses
EnumProcessModules
GetModuleFileNameExA
等!

解决方案 »

  1.   

    呵呵,高
    费尽点的,要用到tlhelp32里的函数,好像是什么系统快照
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        OpenDialog1: TOpenDialog;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    function IsFileInUse(fName : string ) : boolean;
    var 
      HFileRes : HFILE; 
    begin 
      Result := false; 
      if not FileExists(fName) then 
        exit; 
      HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE,0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
      Result := (HFileRes = INVALID_HANDLE_VALUE); 
      if not Result then 
        CloseHandle(HFileRes); 
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if Not OpenDialog1.Execute then Exit;
     if IsFileInUse(OpenDialog1.FileName ) then
      begin 
        ShowMessage('File in use'); 
      end 
      else 
      begin 
        ShowMessage('File not in use'); 
      end;
    end;end.
      

  3.   

    xiaotian2000(小天),有个也许很菜的问题请教一下: 
    “var 
        HFileRes : HFILE; ”中HFILE是什么类型啊?我查了半天DELPHI的帮助都没找到。
    可否指教?
    你的算法的思想是不是如果文件已经在运行则无法打开?运行中的文件是被保护的,是吗?
    那如果因为别的原因致使打开文件失败,是不是你的算法就不够严密了?
    小弟纯属菜鸟,只是请教一下,见笑了!
      

  4.   

    HFILE就是文件句柄,相当于THandle
      

  5.   

    多谢白日梦指教了。
    那请问在哪里可以找到关于它得详细介绍那?Delphi的help中有嘛?
    它是不是属于windows SDK的内容阿?