直接跳到内容

文件操作

FileAccess

  • 位置

sys_file.aclib

  • 功能说明

判断文件属性是否具备。

对应c标准库函数:int access(const char *filenpath, int mode);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileNameSTRING(255)文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径××
ModeFileMode模式××
输出参数数据类型描述掉电保持常量
FileAccessDINT文件属性具备返回0,否则返回非0××

文件模式FileMode描述如下:

文件模式枚举值描述
0emExistCheck只检查文件是否存在
1emExcuteableCheck判断文件是否有可执行权限
2emWriteableCheck判断文件是否有写权限
4emReadableCheck判断文件是否有读权限

后三种可以或“or”的方式一起使用,其中windows平台可以不关心可执行权限。

比如:要支持读和写权限,采用emWriteableCheck or emReadableCheck。

  • 示例

    • 示例功能说明 检测'/flash/001.txt'文件是否存在

    • 变量定义

      变量名数据类型初值注释
      strFileNameSTRING(255)'/flash/001.txt'文件名
      efileModeFileModeemExistCheck文件模式
      iOprRetDINT
    • CFC示例 img

    • ST示例 iOprRet := FileAccess( strFileName , efileMode );

    • LD示例 img

FileOpen

  • 位置

sys_file.aclib

  • 功能说明

打开一个文件。

对应c标准库函数:FILE *fopen(const char *filename, const char *mode);

注:打开文件操作完成后,需要使用FileClose关闭文件,否则会造成资源无法释放,导致后续打开文件操作失败。

  • 参数说明
输入参数数据类型描述掉电保持常量
FileNameSTRING(255)1、文件名称(绝对路径);2、只支持/flash/和/sd/根路径;××
modeSTRING(32)文件模式××
输出参数数据类型描述掉电保持常量
FileOpenPOINTER TO BYTE非0:返回打开的文件句柄指针0: 表示文件打开失败××

文件模式描述如下:

img

  • 示例

    • 示例功能说明 以可读方式打开'/flash/001.txt'文件。

    • 变量定义

      变量名数据类型初值注释
      strFileNameSTRING(255)'/flash/001.txt'文件名
      strFileModeSTRING(32)'rb+'文件模式
      hFdPOINTER TO BYTE文件句柄指针
    • CFC示例 img

    • ST示例 hFd := FileOpen( strFileName , strFileMode );

    • LD示例 img

FileClose

  • 位置

sys_file.aclib

  • 功能说明

关闭打开的文件。

对应c标准库函数:int fclose(FILE *stream);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileIDPOINTER TO BYTE文件句柄指针××
输出参数数据类型描述掉电保持常量
FileCloseDINT成功返回0,失败返回非0××
  • 示例

    • 示例功能说明 关闭一个打开的文件。

    • 变量定义

      变量名数据类型初值注释
      hFdPOINTER TO BYTE文件句柄指针
      iOprRetDINT返回结果
    • CFC示例 img

    • ST示例 iOprRet := FileClose( hFd );

    • LD示例 img

FileRead

  • 位置

sys_file.aclib

  • 功能说明

从文件中读取数据。

对应c标准库函数:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

  • 参数说明
输入参数数据类型描述保持常量
FileIDPOINTER TO BYTE文件句柄指针××
BufferPOINT TO BYTE数据存放首地址××
LENUDINT要读取的数据长度,单位:字节××
输出参数数据类型描述保持常量
FileReadUDINT实际读取的字节数××
  • 示例

    • 示例功能说明 从打开的文件中读取10个字节长度的数据。

    • 变量定义

      变量名数据类型初值注释
      hFdPOINTER TO BYTE文件句柄指针
      BuffReadARRAY[0..255] OF BYTE读数据存放的缓存
      dwExpectReadLenUDINT10期望读取的数据长度
      retReadLenUDINT实际读到的数据长度
    • CFC示例 img

    • ST示例 retReadLen := FileRead( hFd , ADR(BuffRead) , dwExpectReadLen );

    • LD示例 img

FileWrite

  • 位置

sys_file.aclib

  • 功能说明

存储数据到文件中。

对应c标准库函数:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileIDPOINTER TO BYTE文件句柄指针××
BufferPOINT TO BYTE数据存放首地址××
LENUDINT待写的数据长度,单位:字节××
输出参数数据类型描述掉电保持常量
FileWriteUDINT实际写的数据长度××
  • 示例

    • 示例功能说明 将10个字节长度的数据写入文件中,注意文件需以可写的方式打开(如'wb+')。

    • 变量定义

      变量名数据类型初值注释
      hFdPOINTER TO BYTE文件句柄指针
      BuffWriteARRAY[0..255] OF BYTE读数据存放的缓存
      dwExpectWriteLenUDINT10待写的数据长度
      retWriteLenUDINT实际写的数据长度
    • CFC示例 img

    • ST示例 retWriteLen := FileWrite( hFd , ADR(BuffWrite) , dwExpectWriteLen );

    • LD示例 img

FileSetPos

  • 位置

sys_file.aclib

  • 功能说明

设置文件偏移。

对应c标准库函数:int fseek(FILE *stream, long int offset, int whence);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileIDPOINTER TO BYTE文件句柄指针××
PosDINT距离指定位置的偏移××
WhenceDINT方向0: 文件头1: 当前位置2: 文件尾××
输出参数数据类型描述掉电保持常量
FileSetPosDINT成功返回0,失败返回非0××
  • 示例

    • 示例功能说明 将文件定位到文件尾部。

    • 变量定义

      变量名数据类型初值注释
      hFdPOINTER TO BYTE文件句柄指针
      posUDINT0期望设置到的文件偏移
      whenceDINT2期望设置的文件定位方式
      iOprRetDINT
    • CFC示例 img

    • ST示例 iOprRet := FileSetPos( hFd , pos , whence );

    • LD示例 img

FileGetPos

  • 位置

sys_file.aclib

  • 功能说明

获取文件偏移。

对应c标准库函数:long int ftell(FILE *stream);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileIDPOINTER TO BYTE文件句柄指针××
输出参数数据类型描述掉电保持常量
FileGetPosDINT≥0 : 获取到的文件偏移其余:有错误发生××
  • 示例

    • 示例功能说明 获取文件当前位置。

    • 变量定义

      变量名数据类型初值注释
      hFdPOINTER TO BYTE文件句柄指针
      retGetPosDINT
    • CFC示例 img

    • ST示例 retGetPos := FileGetPos( hFd );

    • LD示例 img

FileFlush

  • 位置

sys_file.aclib

  • 功能说明

同步文件数据到磁盘。

对应c标准库函数:int fflush(FILE *stream);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileIDPOINTER TO BYTE文件句柄指针××
输出参数数据类型描述掉电保持常量
FileFlushDINT成功返回0,失败返回非0××
  • 示例

    • 示例功能说明 同步文件数据到磁盘。

    • 变量定义

      变量名数据类型初值注释
      hFdPOINTER TO BYTE文件句柄指针
      iOprRetDINT
    • CFC示例 img

    • ST示例 iOprRet := FileFlush( hFd );

    • LD示例 img

ileEof

  • 位置

sys_file.aclib

  • 功能说明

测试给定文件的结束标识符。

对应c标准库函数:int feof(FILE *stream);

  • 参数说明
输入参数数据类型描述保持常量
FileIDPOINTER TO BYTE文件句柄指针××
输出参数数据类型描述保持常量
FileEofDINT0:不是文件结束非0:文件结束(注意:此功能一般在FileRead之后使用,当FileRead读不到数据时才认为文件结束,就算读到最后一个字符也不算文件结束。)××
  • 示例

    • 示例功能说明 测试文件是否已遇到结束标识符。

    • 变量定义

      变量名数据类型初值注释
      hFdPOINTER TO BYTE文件句柄指针
      IsFileEofDINT
    • CFC示例 img

    • ST示例 IsFileEof := FileEof(hFd);

    • LD示例 img

FileGetSize

  • 位置

sys_file.aclib

  • 功能说明

获取文件大小。

  • 参数说明
输入参数数据类型描述掉电保持常量
FileNameSTRING(255)文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径××
输出参数数据类型描述掉电保持常量
FileGetSizeDINT返回的文件大小××
  • 示例

    • 示例功能说明 获取'/flash/001.txt'文件的大小。

    • 变量定义

      变量名数据类型初值注释
      strFileNameSTRING(255)'/flash/001.txt'文件名
      retFileSizeUDINT
    • CFC示例 img

    • ST示例 retFileSize := FileGetSize(strFileName);

    • LD示例 img

FileRemove

  • 位置

sys_file.aclib

  • 功能说明

删除文件。

对应c标准库函数:int remove(const char *filename);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileNameSTRING(255)文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径××
输出参数数据类型描述掉电保持常量
FileRemoveDINT成功返回0,失败返回非0××
  • 示例

    • 示例功能说明 删除'/flash/001.txt'文件。

    • 变量定义

      变量名数据类型初值注释
      strFileNameSTRING(255)'/flash/001.txt'文件名
      iOprRetDINT
    • CFC示例 img

    • ST示例 iOprRet := FileRemove(strFileName);

    • LD示例 img

FileRename

  • 位置

sys_file.aclib

  • 功能说明

文件重命名。

对应c标准库函数:int rename(const char *old_filename, const char *new_filename);

  • 参数说明
输入参数数据类型描述掉电保持常量
FileOldNameSTRING(255)旧文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径××
FileNewNameSTRING(255)新文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径××
输出参数数据类型描述掉电保持常量
FileRenameDINT成功返回0,失败返回非0××
  • 示例

    • 示例功能说明 将'/flash/001.txt'文件重命名为'/flash/002.txt'。

    • 变量定义

      变量名数据类型初值注释
      strOldFileNameSTRING(255)'/flash/001.txt'文件名
      strNewFileNameSTRING(255)'/flash/002.txt'文件名
      iOprRetDINT
    • CFC示例 img

    • ST示例 iOprRet := FileRename( strOldFileName , strNewFileName );

    • LD示例 img

FileCopy

  • 位置

sys_file.aclib

  • 功能说明

拷贝文件。

  • 参数说明
输入参数数据类型描述掉电保持常量
FileDestinationSTRING(255)目的文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径××
FileSourceSTRING(255)源文件名称(全路径)只支持如下根路径:'/flash/'代表Flash路径'/sd/'代表SD路径××
输出参数数据类型描述掉电保持常量
FileCopyDINT成功返回0,失败返回非0××
  • 示例

    • 示例功能说明 拷贝'/flash/001.txt'文件内容到'/flash/002.txt',如果'/flash/002.txt'不存在则自动创建。

    • 变量定义

      变量名数据类型初值注释
      strFileNameDstSTRING(255)'/flash/002.txt'文件名
      strFileNameSrcSTRING(255)'/flash/001.txt'文件名
      iOprRetDINT
    • CFC示例 img

    • ST示例 iOprRet := FileCopy( strFileNameDst , strFileNameSrc );

    • LD示例 img

文件综合示例-读文件

  • 示例功能说明(例程路径:安装目录\example\文件操作)

读'/flash/001.txt'文件的第6到15个字节的数据内容,操作方法及结果如下:

  1. 先准备一个文件,内有10字节数据,从第一个字节开始的内容依次为字符0到字符9;
  2. 使用示例代码可以读到5个字节的内容,依次为字符5到字符9
  • 变量定义
变量名数据类型初值注释
strFileNameSTRING(255)'/flash/001.txt'文件名
hFdPOINTER TO BYTE文件句柄
iOprRetDINT
BuffReadARRAY[0..255] OF BYTE读数据存放的缓存
iFileSizeDINT文件长度
uiRdStartPosUDINT5读文件的起始位置
uiExpectRdLenUDINT10期望读取的数据长度
uiRdLenRetUDINT实际读到的数据长度
  • 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字节的内容。

  • 变量定义
变量名数据类型初值注释
strFileNameSTRING(255)'/flash/001.txt'文件名
hFdPOINTER TO BYTE文件句柄
iOprRetDINT
BuffWriteARRAY[0..255] OF BYTE待写数据存放的缓存
dwExpectWriteLenUDINT10待写的数据长度
uiWrLenRetUDINT实际写的数据长度
iErrDINT写过程中的错误,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;
文件操作已经加载完毕