加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何获取在Delphi中锁定文件的句柄?

发布时间:2020-12-15 09:42:24 所属栏目:大数据 来源:网络整理
导读:LockFile API采用文件句柄.我通常使用TStream进行文件访问,所以我不确定如何获得适当的句柄,仅给出一个ANSIString文件名.我的目的是在进程中锁定文件(最初可能不存在),将一些信息写入其他用户,然后解锁并删除它. 我会很感激示例代码或指向它以使其可靠. 解决
LockFile API采用文件句柄.我通常使用TStream进行文件访问,所以我不确定如何获得适当的句柄,仅给出一个ANSIString文件名.我的目的是在进程中锁定文件(最初可能不存在),将一些信息写入其他用户,然后解锁并删除它.

我会很感激示例代码或指向它以使其可靠.

解决方法

您可以将LockFile功能与 CreateFile和 UnlockFile功能结合使用.

看这个例子

procedure TFrmMain.Button1Click(Sender: TObject);
var
  aHandle     : THandle;
  aFileSize   : Integer;
  aFileName   : String;
begin
    aFileName    :='C:myfoldermyfile.ext';
    aHandle      := CreateFile(PChar(aFileName),GENERIC_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); // get the handle of the file
    try
        aFileSize   := GetFileSize(aHandle,nil); //get the file size for use in the  lockfile function
        Win32Check(LockFile(aHandle,aFileSize,0)); //lock the file
        //your code
        //
        //
        //
        Win32Check(UnlockFile(aHandle,0));//unlock the file
    finally
    CloseHandle(aHandle);//Close the handle of the file.
    end;

end;

另一个选项是,如果要使用TFileStream锁定文件,可以使用独占访问权限打开文件(fmShareExclusive).

Var
MyStream :TFilestream;
begin
  MyStream := TFilestream.Create( aFileName,fmOpenRead or fmShareExclusive ); 

end;

注意:在两个示例中,访问都是只读的,您必须更改标志才能写入文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读