删除文件并检查文件是否存在
检查文件是否存在并删除它,这是与文件系统(即文件所依赖的外部环境)相关的关键操作。目前为止,我们已经了解了操作文件内部内容的函数。从本节开始,重点将转向将文件作为不可分割的单元来管理的函数。
bool FileIsExist(const string filename, int flag = 0)
该函数检查名称为 filename 的文件是否存在,如果存在,则返回 true。使用 flag 参数选择搜索目录:如果该参数为 0(默认值),则在当前终端实例的目录 (MQL5/Files) 中搜索文件;如果 flag 等于 FILE_COMMON,则检查所有终端的公用目录 Users/<user>...MetaQuotes/Terminal/Common/Files。如果 MQL 程序在测试程序中运行,则工作目录位于测试程序代理文件夹内 (Tester/<agent>/MQL5/Files),参见 处理文件一章的引言部分。
指定的名称可能不属于文件,而是属于目录。在此情况下,FileIsExist 函数将返回 false,并且伪误代码 5018 (FILE_IS_DIRECTORY) 将被记录到 _LastError 变量中。
bool FileDelete(const string filename, int flag = 0)
该函数删除具有指定名称 filename 的文件。flag 参数指定该文件的位置。若使用默认值,删除操作是在当前终端实例的工作目录 (MQL5/Files) 中执行,如果程序在测试程序中运行,则在测试程序代理的目录 (Tester/<agent>/MQL5/Files) 中执行。如果 flag 等于 FILE_COMMON,则文件必须位于所有终端的公用文件夹内 (/Terminal/Common/Files)。
该函数返回成功 (true) 或出错 (false) 标志。
该函数不允许删除目录。要删除目录,请使用 FolderDelete 函数(参见 处理文件夹)。
为了解描述的函数如何工作,我们将使用 FileExist.mq5 脚本。我们将对一个临时文件进行若干操作。
const string filetemp = "MQL5Book/temp";
|
该文件最初不存在,因此 FileIsExist 和 FileDelet 函数均返回 false,错误代码为 5019 (FILE_NOT_EXIST)。
然后我们创建一个文件,则 FileIsExist 函数报告该文件存在。然而,不能将其删除,因为它被我们的进程打开且占用(错误代码 5006,CANNOT_DELETE_FILE)。
在文件关闭后才能被删除。
在脚本末尾,检查了 "MQL5Book" 目录并尝试删除它。FileIsExist 返回 false,因为它不是一个文件,但错误代码 5018 (FILE_IS_DIRECTORY) 表明它是一个目录。