forked from rosh/MQL5Book
53 lines
2.3 KiB
MQL5
53 lines
2.3 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| FileCopy.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#include "..\..\Include\PRTF.mqh"
| |||
| |||
const string source = "MQL5Book/source";
| |||
const string destination = "MQL5Book/destination";
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
// try copy a nonexistent file
| |||
PRTF(FileCopy(source, 0, destination, FILE_COMMON)); // false / FILE_NOT_EXIST(5019)
| |||
// create new file
| |||
int handle = PRTF(FileOpen(source, FILE_TXT | FILE_WRITE)); // 1
| |||
// write some text
| |||
PRTF(FileWriteString(handle, "Test Text\n")); // 22
| |||
// flush to disk but keep open (locked)
| |||
FileFlush(handle);
| |||
| |||
// the next call will fail, because file was open without FILE_SHARE_READ
| |||
PRTF(FileCopy(source, 0, destination, FILE_COMMON)); // false / CANNOT_OPEN_FILE(5004)
| |||
| |||
// now close it (and unlock)
| |||
FileClose(handle);
| |||
| |||
PRTF(FileGetInteger(source, FILE_CREATE_DATE)); // 1629757115, example
| |||
PRTF(FileGetInteger(source, FILE_MODIFY_DATE)); // 1629757115, example
| |||
| |||
// wait a bit to make noticable gap
| |||
// between creation and modification times in the copy below
| |||
Sleep(3000);
| |||
| |||
// try to copy it again
| |||
PRTF(FileCopy(source, 0, destination, FILE_COMMON)); // true
| |||
PRTF(FileGetInteger(destination, FILE_CREATE_DATE, true)); // 1629757118, +3 seconds
| |||
PRTF(FileGetInteger(destination, FILE_MODIFY_DATE, true)); // 1629757115, example
| |||
| |||
// now try to move the copy back over original one
| |||
// this should fail because overwriting is not allowed by default
| |||
PRTF(FileMove(destination, FILE_COMMON, source, 0)); // false / FILE_CANNOT_REWRITE(5020)
| |||
| |||
// and now it should succeed thanks to FILE_REWRITE
| |||
PRTF(FileMove(destination, FILE_COMMON, source, FILE_REWRITE)); // true
| |||
| |||
// final cleanup for next runs of the test
| |||
FileDelete(source);
| |||
}
| |||
//+------------------------------------------------------------------+
|