文件操作
FileAccess
- 位置
sys_file.aclib
- 功能说明
判断文件属性是否具备。
对应c标准库函数:int access(const char *filenpath, int mode);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileName | STRING(255) | 文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径 | × | × |
Mode | FileMode | 模式 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileAccess | DINT | 文件属性具备返回0,否则返回非0 | × | × |
文件模式FileMode描述如下:
文件模式 | 枚举值 | 描述 |
---|---|---|
0 | emExistCheck | 只检查文件是否存在 |
1 | emExcuteableCheck | 判断文件是否有可执行权限 |
2 | emWriteableCheck | 判断文件是否有写权限 |
4 | emReadableCheck | 判断文件是否有读权限 |
后三种可以或“or”的方式一起使用,其中windows平台可以不关心可执行权限。
比如:要支持读和写权限,采用emWriteableCheck or emReadableCheck。
示例
示例功能说明 检测'/flash/001.txt'文件是否存在
变量定义
变量名 数据类型 初值 注释 strFileName STRING(255) '/flash/001.txt' 文件名 efileMode FileMode emExistCheck 文件模式 iOprRet DINT CFC示例
ST示例 iOprRet := FileAccess( strFileName , efileMode );
LD示例
FileOpen
- 位置
sys_file.aclib
- 功能说明
打开一个文件。
对应c标准库函数:FILE *fopen(const char *filename, const char *mode);
注:打开文件操作完成后,需要使用FileClose关闭文件,否则会造成资源无法释放,导致后续打开文件操作失败。
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileName | STRING(255) | 1、文件名称(绝对路径);2、只支持/flash/和/sd/根路径; | × | × |
mode | STRING(32) | 文件模式 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileOpen | POINTER TO BYTE | 非0:返回打开的文件句柄指针0: 表示文件打开失败 | × | × |
文件模式描述如下:
示例
示例功能说明 以可读方式打开'/flash/001.txt'文件。
变量定义
变量名 数据类型 初值 注释 strFileName STRING(255) '/flash/001.txt' 文件名 strFileMode STRING(32) 'rb+' 文件模式 hFd POINTER TO BYTE 文件句柄指针 CFC示例
ST示例 hFd := FileOpen( strFileName , strFileMode );
LD示例
FileClose
- 位置
sys_file.aclib
- 功能说明
关闭打开的文件。
对应c标准库函数:int fclose(FILE *stream);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileID | POINTER TO BYTE | 文件句柄指针 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileClose | DINT | 成功返回0,失败返回非0 | × | × |
示例
示例功能说明 关闭一个打开的文件。
变量定义
变量名 数据类型 初值 注释 hFd POINTER TO BYTE 文件句柄指针 iOprRet DINT 返回结果 CFC示例
ST示例 iOprRet := FileClose( hFd );
LD示例
FileRead
- 位置
sys_file.aclib
- 功能说明
从文件中读取数据。
对应c标准库函数:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- 参数说明
输入参数 | 数据类型 | 描述 | 保持 | 常量 |
---|---|---|---|---|
FileID | POINTER TO BYTE | 文件句柄指针 | × | × |
Buffer | POINT TO BYTE | 数据存放首地址 | × | × |
LEN | UDINT | 要读取的数据长度,单位:字节 | × | × |
输出参数 | 数据类型 | 描述 | 保持 | 常量 |
---|---|---|---|---|
FileRead | UDINT | 实际读取的字节数 | × | × |
示例
示例功能说明 从打开的文件中读取10个字节长度的数据。
变量定义
变量名 数据类型 初值 注释 hFd POINTER TO BYTE 文件句柄指针 BuffRead ARRAY[0..255] OF BYTE 读数据存放的缓存 dwExpectReadLen UDINT 10 期望读取的数据长度 retReadLen UDINT 实际读到的数据长度 CFC示例
ST示例 retReadLen := FileRead( hFd , ADR(BuffRead) , dwExpectReadLen );
LD示例
FileWrite
- 位置
sys_file.aclib
- 功能说明
存储数据到文件中。
对应c标准库函数:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileID | POINTER TO BYTE | 文件句柄指针 | × | × |
Buffer | POINT TO BYTE | 数据存放首地址 | × | × |
LEN | UDINT | 待写的数据长度,单位:字节 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileWrite | UDINT | 实际写的数据长度 | × | × |
示例
示例功能说明 将10个字节长度的数据写入文件中,注意文件需以可写的方式打开(如'wb+')。
变量定义
变量名 数据类型 初值 注释 hFd POINTER TO BYTE 文件句柄指针 BuffWrite ARRAY[0..255] OF BYTE 读数据存放的缓存 dwExpectWriteLen UDINT 10 待写的数据长度 retWriteLen UDINT 实际写的数据长度 CFC示例
ST示例 retWriteLen := FileWrite( hFd , ADR(BuffWrite) , dwExpectWriteLen );
LD示例
FileSetPos
- 位置
sys_file.aclib
- 功能说明
设置文件偏移。
对应c标准库函数:int fseek(FILE *stream, long int offset, int whence);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileID | POINTER TO BYTE | 文件句柄指针 | × | × |
Pos | DINT | 距离指定位置的偏移 | × | × |
Whence | DINT | 方向0: 文件头1: 当前位置2: 文件尾 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileSetPos | DINT | 成功返回0,失败返回非0 | × | × |
示例
示例功能说明 将文件定位到文件尾部。
变量定义
变量名 数据类型 初值 注释 hFd POINTER TO BYTE 文件句柄指针 pos UDINT 0 期望设置到的文件偏移 whence DINT 2 期望设置的文件定位方式 iOprRet DINT CFC示例
ST示例 iOprRet := FileSetPos( hFd , pos , whence );
LD示例
FileGetPos
- 位置
sys_file.aclib
- 功能说明
获取文件偏移。
对应c标准库函数:long int ftell(FILE *stream);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileID | POINTER TO BYTE | 文件句柄指针 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileGetPos | DINT | ≥0 : 获取到的文件偏移其余:有错误发生 | × | × |
示例
示例功能说明 获取文件当前位置。
变量定义
变量名 数据类型 初值 注释 hFd POINTER TO BYTE 文件句柄指针 retGetPos DINT CFC示例
ST示例 retGetPos := FileGetPos( hFd );
LD示例
FileFlush
- 位置
sys_file.aclib
- 功能说明
同步文件数据到磁盘。
对应c标准库函数:int fflush(FILE *stream);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileID | POINTER TO BYTE | 文件句柄指针 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileFlush | DINT | 成功返回0,失败返回非0 | × | × |
示例
示例功能说明 同步文件数据到磁盘。
变量定义
变量名 数据类型 初值 注释 hFd POINTER TO BYTE 文件句柄指针 iOprRet DINT CFC示例
ST示例 iOprRet := FileFlush( hFd );
LD示例
ileEof
- 位置
sys_file.aclib
- 功能说明
测试给定文件的结束标识符。
对应c标准库函数:int feof(FILE *stream);
- 参数说明
输入参数 | 数据类型 | 描述 | 保持 | 常量 |
---|---|---|---|---|
FileID | POINTER TO BYTE | 文件句柄指针 | × | × |
输出参数 | 数据类型 | 描述 | 保持 | 常量 |
---|---|---|---|---|
FileEof | DINT | 0:不是文件结束非0:文件结束(注意:此功能一般在FileRead之后使用,当FileRead读不到数据时才认为文件结束,就算读到最后一个字符也不算文件结束。) | × | × |
示例
示例功能说明 测试文件是否已遇到结束标识符。
变量定义
变量名 数据类型 初值 注释 hFd POINTER TO BYTE 文件句柄指针 IsFileEof DINT CFC示例
ST示例 IsFileEof := FileEof(hFd);
LD示例
FileGetSize
- 位置
sys_file.aclib
- 功能说明
获取文件大小。
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileName | STRING(255) | 文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileGetSize | DINT | 返回的文件大小 | × | × |
示例
示例功能说明 获取'/flash/001.txt'文件的大小。
变量定义
变量名 数据类型 初值 注释 strFileName STRING(255) '/flash/001.txt' 文件名 retFileSize UDINT CFC示例
ST示例 retFileSize := FileGetSize(strFileName);
LD示例
FileRemove
- 位置
sys_file.aclib
- 功能说明
删除文件。
对应c标准库函数:int remove(const char *filename);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileName | STRING(255) | 文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileRemove | DINT | 成功返回0,失败返回非0 | × | × |
示例
示例功能说明 删除'/flash/001.txt'文件。
变量定义
变量名 数据类型 初值 注释 strFileName STRING(255) '/flash/001.txt' 文件名 iOprRet DINT CFC示例
ST示例 iOprRet := FileRemove(strFileName);
LD示例
FileRename
- 位置
sys_file.aclib
- 功能说明
文件重命名。
对应c标准库函数:int rename(const char *old_filename, const char *new_filename);
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileOldName | STRING(255) | 旧文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径 | × | × |
FileNewName | STRING(255) | 新文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileRename | DINT | 成功返回0,失败返回非0 | × | × |
示例
示例功能说明 将'/flash/001.txt'文件重命名为'/flash/002.txt'。
变量定义
变量名 数据类型 初值 注释 strOldFileName STRING(255) '/flash/001.txt' 文件名 strNewFileName STRING(255) '/flash/002.txt' 文件名 iOprRet DINT CFC示例
ST示例 iOprRet := FileRename( strOldFileName , strNewFileName );
LD示例
FileCopy
- 位置
sys_file.aclib
- 功能说明
拷贝文件。
- 参数说明
输入参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileDestination | STRING(255) | 目的文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径 | × | × |
FileSource | STRING(255) | 源文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径 | × | × |
输出参数 | 数据类型 | 描述 | 掉电保持 | 常量 |
---|---|---|---|---|
FileCopy | DINT | 成功返回0,失败返回非0 | × | × |
示例
示例功能说明 拷贝'/flash/001.txt'文件内容到'/flash/002.txt',如果'/flash/002.txt'不存在则自动创建。
变量定义
变量名 数据类型 初值 注释 strFileNameDst STRING(255) '/flash/002.txt' 文件名 strFileNameSrc STRING(255) '/flash/001.txt' 文件名 iOprRet DINT CFC示例
ST示例 iOprRet := FileCopy( strFileNameDst , strFileNameSrc );
LD示例
文件综合示例-读文件
- 示例功能说明(例程路径:安装目录\example\文件操作)
读'/flash/001.txt'文件的第6到15个字节的数据内容,操作方法及结果如下:
- 先准备一个文件,内有10字节数据,从第一个字节开始的内容依次为字符0到字符9;
- 使用示例代码可以读到5个字节的内容,依次为字符5到字符9
- 变量定义
变量名 | 数据类型 | 初值 | 注释 |
---|---|---|---|
strFileName | STRING(255) | '/flash/001.txt' | 文件名 |
hFd | POINTER TO BYTE | 文件句柄 | |
iOprRet | DINT | ||
BuffRead | ARRAY[0..255] OF BYTE | 读数据存放的缓存 | |
iFileSize | DINT | 文件长度 | |
uiRdStartPos | UDINT | 5 | 读文件的起始位置 |
uiExpectRdLen | UDINT | 10 | 期望读取的数据长度 |
uiRdLenRet | UDINT | 实际读到的数据长度 |
- ST示例
st
(* 检测文件是否存在 *)
iOprRet := FileAccess( strFileName , 0 );
IF 0 = iOprRet THEN
(* 获取文件大小 *)
iFileSize := FileGetSize(strFileName);
IF iFileSize > uiRdStartPos THEN
(* 打开一个文件 *)
hFd := FileOpen(strFileName, 'rb+');
IF hFd > 0 THEN
(* 跳到指定的文件位置 *)
iOprRet := FileSetPos( hFd , uiRdStartPos , 0 );
IF 0 = iOprRet THEN
(* 读文件 *)
uiRdLenRet := FileRead( hFd , ADR(BuffRead) , uiExpectRdLen );
END_IF;
(* 关闭打开的文件 *)
iOprRet := FileClose( hFd );
END_IF;
END_IF;
END_IF;
文件综合示例-写文件
- 示例功能说明(例程路径:安装目录\example\文件操作)
往'/flash/001.txt'文件的中写入10字节的内容。
- 变量定义
变量名 | 数据类型 | 初值 | 注释 |
---|---|---|---|
strFileName | STRING(255) | '/flash/001.txt' | 文件名 |
hFd | POINTER TO BYTE | 文件句柄 | |
iOprRet | DINT | ||
BuffWrite | ARRAY[0..255] OF BYTE | 待写数据存放的缓存 | |
dwExpectWriteLen | UDINT | 10 | 待写的数据长度 |
uiWrLenRet | UDINT | 实际写的数据长度 | |
iErr | DINT | 写过程中的错误,0表示无错误 |
- ST示例
(* 打开一个文件 *)
hFd := FileOpen(strFileName, 'wb+');
IF hFd > 0 THEN
(* 写文件 *)
uiWrLenRet := FileWrite(hFd, ADR(BuffWrite), dwExpectWriteLen);
IF uiWrLenRet = dwExpectWriteLen THEN
(* 同步数据到磁盘 *)
iOprRet := FileFlush(hFd);
IF 0 = iOprRet THEN
iErr := 0;
ELSE
iErr := 3;
END_IF;
ELSE
iErr := 2;
END_IF;
(* 关闭文件 *)
iOprRet := FileClose(hFd);
IF 0 <> iOprRet THEN
iErr := 4;
END_IF;
hFd := 0;
ELSE
iErr := 1;
END_IF;