比如txt,avi,dat,rm等格式的文件

解决方案 »

  1.   

    晕,关键是正在使用不能删,没有在使用了,经server端确认后才能删,server没有确认是不能删的。
      

  2.   

    //利用OpenFile Api函数判断 
    function FileLocked(Fn: string): Boolean; 
    var 
    I : Integer; 
    Struct: TOfStruct; 
    Style: Cardinal; 
    Hdl: Hfile; 
    Drive: String; 
    begin 
    Style := OF_Share_Exclusive; //排它方式打开 
    Drive := UpperCase(Fn[1]); 
    Struct.fFixedDisk := Ord(Drive <> 'A'); //判断是否是硬盘 
    Struct.cBytes := SizeOf(Struct); 
    For I := 1 to Length(Fn) do 
    Struct.szPathName[I-1] := Fn[I];  
    Struct.szPathName[I] := Chr(0); //填充文件名 
    Hdl := OpenFile(Pchar(Fn), Struct, Style); 
    if Hdl = HFILE_ERROR then 
    begin 
    Result := True; //文件被锁定 
    Showmessage(SysErrorMessage(GetLastError)); //显示错误原因 
    end 
    else 
    Result := False; 
    end; 
     
    //利用CreateFile Api函数判断 
    function LockedFile(Fn: string): Boolean; 
    var 
    AFile: THandle; 
    SecAtrrs: TSecurityAttributes; 
    begin 
    FillChar(SecAtrrs, SizeOf(SecAtrrs), #0); 
    SecAtrrs.nLength := SizeOf(SecAtrrs); //结构体长度 
    SecAtrrs.lpSecurityDescriptor := nil; //安全描述 
    SecAtrrs.bInheritHandle := True; //继承标志 
    AFile := CreateFile(PChar(Fn), GENERIC_READ or GENERIC_WRITE, 
    FILE_SHARE_Read, @SecAtrrs, OPEN_EXISTING, 
    FILE_ATTRIBUTE_Normal, 0); 
    if AFile = INVALID_HANDLE_VALUE then 
    begin 
    Result := True; //文件被锁定 
    showmessage(SysErrorMessage(GetLastError)); 
    end 
    else 
    Result := False; 
    end; 
    从网上翻的。
      

  3.   

    我倒有一个问题了,怎么知道正在使用一文件的程序名?或其主程序的HANDLE?
      

  4.   

    我要判断的文件比较大的媒体文件 400M 左右的,openfile, createfile打开或创建,太浪费时间跟资源了
      

  5.   

    用try..except ,其中让try试图以写方式打开,如果文件正被使用,应该会抛出异常
    我只是想法,没经过试验,楼下继续