Functions.FRead3 方法 | |
从文件中读取字符到分配的缓冲区中。
命名空间:
XSharp.Core
程序集:
XSharp.Core (在 XSharp.Core.dll 中) 版本:2.22 GA
语法 FUNCTION FRead3(
ptrHandle AS IntPtr,
ptrBufferVar AS BYTE[],
dwBytes AS DWORD
) AS DWORD
public static uint FRead3(
IntPtr ptrHandle,
byte[] ptrBufferVar,
uint dwBytes
)
查看代码参数
- ptrHandle
- 类型:IntPtr
要读取的文件句柄。 - ptrBufferVar
- 类型:Byte
指向用于存储从指定文件读取的数据的已分配缓冲区的指针。
此变量的长度必须大于或等于 dwBytes。
An array of bytes to store the data read from the specified file. The length of this variable must be greater than or equal to the number of bytes in the next parameter. - dwBytes
- 类型:UInt32
要读入缓冲区的字节数。
返回值
类型:
UInt32
成功读取的字节数。
返回值小于
dwBytes 或为 0 表示已到达文件末尾或发生其他读取错误。可以使用 FError() 确定具体错误。
备注
FRead3() 与 FRead() 相同,只是缓冲区变量的名称是一个指针,不是通过引用传递的。
详细信息请参见 FRead()。
此函数假定处理原始二进制数据,不依赖于 SetAnsi() 的状态。相比之下,FReadText() 和 FRead4() 依赖于 SetAnsi()。
备注 提示: |
---|
X# 运行时中的低级文件 IO 函数在后台使用 .Net 文件流。
这意味着 FOpen() 和 FCreate() 返回的文件句柄不是'正常'的文件句柄,而是用于在运行时的流集合中找到底层流对象的唯一标识符。
这也意味着你不能使用 FRead() 和 FWrite() 这样的函数,这些函数不是在 X# 运行时中创建的文件句柄。
如果你想访问底层的 FileStream,你应该调用函数 FGetStream(IntPtr) |
示例
此示例在成功打开文件后使用 FRead3() 将 128 个字节读入缓冲区:
1DEFINE F_BLOCK := 128
2Function Start()
3 LOCAL cBuffer AS PTR
4 cBuffer := MemAlloc(F_BLOCK)
5 IF cBuffer = NULL PTR
6 RETURN FALSE
7 ENDIF
8 ptrHandle := FOpen2("temp.txt", FO_READ)
9 IF ptrHandle = F_ERROR
10 ? DOSErrString(FError())
11 RETURN FALSE
12 ELSE
13 IF FRead3(ptrHandle, cBuffer, F_BLOCK) <paramref name="" /> F_BLOCK
14 ? DOSErrString(FError())
15 RETURN FALSE
16 ENDIF
17 FClose(ptrHandle)
18 ENDIF
19 MemFree(cBuffer)
20 RETURN TRUE
参见