点击或拖拽改变大小

Functions.FOpen 方法 (String, UInt32)

X#
打开一个文件。

命名空间:  XSharp.Core
程序集:  XSharp.Core (在 XSharp.Core.dll 中) 版本:2.22 GA
语法
 FUNCTION FOpen(
	cFileName AS STRING,
	kMode AS DWORD
) AS IntPtr
查看代码

参数

cFileName
类型:String
文件名,包括可选的驱动器、目录和扩展名。忽略 SetDefault() 和 SetPath() 设置;除非您在文件名中指定驱动器和目录,否则使用 Windows 默认值。不假定任何扩展名。
在发生并发控制冲突的情况下,此函数设置 NetErr()。
kMode
类型:UInt32
DOS 打开模式,决定文件的可访问性。
打开模式由两种类型的模式组成:访问模式 + 共享模式。指定访问模式常量表示如何访问打开的文件;共享模式决定其他进程如何访问该文件。
可用的打开和共享模式常量如下:
访问模式 操作
FO_READ 打开以读取(默认)
FO_READWRITE 打开以读取或写入
FO_WRITE 打开以写入

共享模式 操作
FO_COMPAT 兼容模式(默认)
FO_DENYNONE 允许其他人读取或写入
FO_DENYREAD 阻止其他人读取
FO_DENYWRITE 阻止其他人写入
FO_EXCLUSIVE 独占使用
FO_SHARED 与 FO_DENYNONE 相同
默认打开模式是不可共享和只读。
如果仅使用访问模式,文件将以不可共享的方式打开。

返回值

类型:IntPtr
打开文件的文件句柄,范围为 0 到 32,767。
此值类似于数据库系统中的别名,用于向其他文件函数标识打开的文件。
因此,将返回值分配给变量以供后续使用很重要,如下面的示例所示。 如果发生错误,FOpen() 返回 F_ERROR。可以使用 FError() 确定具体错误。
备注
FOpen() 是一个低级文件函数,用于打开现有文件以进行读取和写入,具体取决于 kMode 参数。 请注意,为了让两个进程同时使用同一个文件,两个文件都应以 FO_SHARED 共享模式打开。 每当出现错误时,可以使用 FError() 确定具体错误。
例如,如果文件不存在,FOpen() 返回 F_ERROR,FError() 返回 2 表示未找到文件。
备注
提示 提示:
X# 运行时中的低级文件 IO 函数在后台使用 .Net 文件流。
这意味着 FOpen() 和 FCreate() 返回的文件句柄不是'正常'的文件句柄,而是用于在运行时的流集合中找到底层流对象的唯一标识符。 这也意味着你不能使用 FRead() 和 FWrite() 这样的函数,这些函数不是在 X# 运行时中创建的文件句柄。
如果你想访问底层的 FileStream,你应该调用函数 FGetStream(IntPtr)
示例
此示例使用 FOpen() 以可共享读/写状态打开文件,如果打开失败则显示错误消息:
X#
1ptrHandle := FOpen("temp.txt")
2IF ptrHandle = F_ERROR
3    ? DOSErrString(FError())
4ENDIF
此示例使用 FOpen() 打开文件,如果 FOpen() 失败则可选重试:
X#
 1FUNCTION NetOpen(cFile AS STRING,;
 2        wMode AS DWORD, wSeconds AS DWORD);
 3        AS LOGIC PASCAL
 4    LOCAL lForever AS LOGIC
 5    // 如果 wSeconds 为零则永远重试
 6    lForever := (wSeconds = 0)
 7    DO WHILE (lForever .OR. wSeconds > 0)
 8        IF FOpen(cFile, wMode) != F_ERROR
 9        RETURN TRUE          // 打开成功
10        ENDIF
11        InKey(1)            // 等待一秒
12        wSeconds -= 1
13    ENDDO
14    RETURN FALSE            // 打开失败
参见