点击或拖拽改变大小

Functions.FFLock64 方法

X#
锁定已打开文件的一部分。

命名空间:  XSharp.Core
程序集:  XSharp.Core (在 XSharp.Core.dll 中) 版本:2.22 GA
语法
 FUNCTION FFLock64(
	ptrHandle AS IntPtr,
	offset AS INT64,
	length AS INT64
) AS LOGIC
查看代码

参数

ptrHandle
类型:IntPtr
要锁定的已打开文件的句柄。
offset
类型:Int64
开始锁定的文件偏移量。
值为零对应文件的第一个字节。
length
类型:Int64
要锁定的字节数。

返回值

类型:Boolean
如果成功则返回 TRUE;否则返回 FALSE。
备注
FFLock() 锁定文件的指定部分。
这可以防止其他进程访问该部分。 可以锁定文件的多个部分,但同一个字节不应被锁定多次。
还可以锁定超出文件末尾的部分。
这允许您在多用户环境中追加文件。
备注
提示 提示:
X# 运行时中的低级文件 IO 函数在后台使用 .Net 文件流。
这意味着 FOpen() 和 FCreate() 返回的文件句柄不是'正常'的文件句柄,而是用于在运行时的流集合中找到底层流对象的唯一标识符。 这也意味着你不能使用 FRead() 和 FWrite() 这样的函数,这些函数不是在 X# 运行时中创建的文件句柄。
如果你想访问底层的 FileStream,你应该调用函数 FGetStream(IntPtr)
示例
此示例使用 FFLock() 锁定文件中从偏移量 300 开始的 100 个字节:
X#
1ptrHandle := FOpen2("c:\data\myfile.txt", ;
2        FO_READWRITE + FO_SHARED)
3IF FFLock(ptrHandle, 300, 100)
4    ? "锁定成功"
5ENDIF
此示例实现了一个带有可选重试的 FFLock():
X#
 1FUNCTION FileLock(ptrHandle AS PTR,;
 2        dwOffset AS DWORD, dwLength AS DWORD,;
 3        wSeconds AS DWORD) AS LOGIC PASCAL
 4    LOCAL lForever AS LOGIC
 5    IF FFLock(ptrHandle, dwOffset, dwLength)
 6        RETURN TRUE            // 已锁定
 7    ENDIF
 8    // 如果 wSeconds 为零,则重试直到成功
 9    lForever := (wSeconds = 0)
10    DO WHILE (lForever .OR. wSeconds > 0)
11        IF FFLock(ptrHandle, dwOffset, dwLength)
12            RETURN TRUE    // 已锁定
13        ENDIF
14        InKey(.5)            // 等待
15        nSeconds -= 1
16    ENDDO
17    RETURN FALSE                // 未锁定
参见