Xóa một tệp và kiểm tra sự tồn tại của nó
Việc kiểm tra xem một tệp có tồn tại hay không và xóa nó là những hành động quan trọng liên quan đến hệ thống tệp, tức là môi trường bên ngoài nơi các tệp "sống". Cho đến nay, chúng ta đã xem xét các hàm thao tác với nội dung bên trong của tệp. Từ phần này, trọng tâm sẽ chuyển sang các hàm quản lý tệp như những đơn vị không thể chia cắt.
bool FileIsExist(const string filename, int flag = 0)
Hàm này kiểm tra xem một tệp có tên filename
có tồn tại hay không và trả về true
nếu có. Thư mục tìm kiếm được chọn bằng tham số flag
: nếu nó là 0 (giá trị mặc định), tệp sẽ được tìm kiếm trong thư mục của phiên terminal hiện tại (MQL5/Files
); nếu flag
bằng FILE_COMMON
, thư mục chung của tất cả các terminal Users/<user>...MetaQuotes/Terminal/Common/Files
sẽ được kiểm tra. Nếu chương trình MQL đang chạy trong tester, thư mục làm việc nằm trong thư mục của tester agent (Tester/<agent>/MQL5/Files
), xem phần giới thiệu của chương Làm việc với tệp.
Tên được chỉ định có thể không phải là tệp mà là một thư mục. Trong trường hợp này, hàm FileIsExist
sẽ trả về false
và một lỗi giả 5018 (FILE_IS_DIRECTORY
) sẽ được ghi vào biến _LastError
.
bool FileDelete(const string filename, int flag = 0)
Hàm này xóa tệp có tên được chỉ định filename
. Tham số flag
xác định vị trí của tệp. Với giá trị mặc định, việc xóa được thực hiện trong thư mục làm việc của phiên terminal hiện tại (MQL5/Files
) hoặc tester agent (Tester/<agent>/MQL5/Files
) nếu chương trình đang chạy trong tester. Nếu flag
bằng FILE_COMMON
, tệp phải nằm trong thư mục chung của tất cả các terminal (/Terminal/Common/Files
).
Hàm trả về dấu hiệu thành công (true
) hoặc lỗi (false
).
Hàm này không cho phép xóa thư mục. Để làm điều đó, hãy sử dụng hàm FolderDelete
(xem Làm việc với thư mục).
Để xem cách các hàm được mô tả hoạt động, chúng ta sẽ sử dụng script FileExist.mq5
. Chúng ta sẽ thực hiện một số thao tác với một tệp tạm thời.
const string filetemp = "MQL5Book/temp";
void OnStart()
{
PRTF(FileIsExist(filetemp)); // false / FILE_NOT_EXIST(5019)
PRTF(FileDelete(filetemp)); // false / FILE_NOT_EXIST(5019)
int handle = PRTF(FileOpen(filetemp, FILE_TXT | FILE_WRITE | FILE_ANSI)); // 1
PRTF(FileIsExist(filetemp)); // true
PRTF(FileDelete(filetemp)); // false / CANNOT_DELETE_FILE(5006)
FileClose(handle);
PRTF(FileIsExist(filetemp)); // true
PRTF(FileDelete(filetemp)); // true
PRTF(FileIsExist(filetemp)); // false / FILE_NOT_EXIST(5019)
PRTF(FileIsExist("MQL5Book")); // false / FILE_IS_DIRECTORY(5018)
PRTF(FileDelete("MQL5Book")); // false / FILE_IS_DIRECTORY(5018)
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Tệp ban đầu không tồn tại, vì vậy cả hai hàm FileIsExist
và FileDelete
đều trả về false
, và mã lỗi là 5019 (FILE_NOT_EXIST
).
Sau đó, chúng ta tạo một tệp, và hàm FileIsExist
báo cáo sự hiện diện của nó. Tuy nhiên, tệp không thể bị xóa vì nó đang mở và bị chiếm dụng bởi tiến trình của chúng ta (mã lỗi 5006, CANNOT_DELETE_FILE
).
Khi tệp được đóng, nó có thể bị xóa.
Ở cuối script, thư mục MQL5Book
được kiểm tra và cố gắng xóa nó. Hàm FileIsExist
trả về false
vì nó không phải là tệp, tuy nhiên mã lỗi 5018 (FILE_IS_DIRECTORY
) cho biết đó là một thư mục.