Дополнил его вашей проверкой на существование файла.
Результат аналогичный - скрипт файла не видит.
//+------------------------------------------------------------------+//| prob.mq5 |//| Copyright 2023, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2023, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"//--- покажем окно входных параметров при запуске скрипта#property script_show_inputs//--- входные параметрыinputstring InpSrc="source.txt"; // источникinputstring InpDst="destination.txt"; // копияinputint InpEncodingType=FILE_ANSI; // ANSI=32 или UNICODE=64//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
if(!FileIsExist("InpSrc",0)) // FILE_COMMONPrint("Нет в папке такого файла!");
//--- отобразим содержимое источника (он должен существовать)if(!FileDisplay(InpSrc)) // 5004 Ошибка открытия файлаreturn;
//--- проверим, существует ли уже файл копии (не обязан быть создан)if(!FileDisplay(InpDst))
{
//--- файл копии не существует, копирование без флага FILE_REWRITE (правильное копирование)if(FileCopy(InpSrc,0,InpDst,0))
Print("File is copied!");
elsePrint("File is not copied!");
}
else
{
//--- файл копии уже существует, попробуем скопировать без флага FILE_REWRITE (неправильное копирование)if(FileCopy(InpSrc,0,InpDst,0))
Print("File is copied!");
elsePrint("File is not copied!");
//--- содержимое файла InpDst останется прежним
FileDisplay(InpDst);
//--- скопируем еще раз с флагом FILE_REWRITE (правильное копирование при существовании файла)if(FileCopy(InpSrc,0,InpDst,FILE_REWRITE))
Print("File is copied!");
elsePrint("File is not copied!");
}
//--- получили копию файла InpSrc
FileDisplay(InpDst);
}
//+------------------------------------------------------------------+//| Чтение содержимого файла |//+------------------------------------------------------------------+bool FileDisplay(conststring file_name)
{
//--- сбросим значение ошибкиResetLastError();
//--- откроем файлint file_handle=FileOpen(file_name,FILE_READ|FILE_TXT|InpEncodingType);
if(file_handle!=INVALID_HANDLE)
{
//--- отобразим в цикле содержимое файлаPrint("+---------------------+");
PrintFormat("File name = %s",file_name);
while(!FileIsEnding(file_handle))
Print(FileReadString(file_handle));
Print("+---------------------+");
//--- закроем файлFileClose(file_handle);
return(true);
}
//--- не удалось открыть файлPrintFormat("%s is not opened, error = %d",file_name,GetLastError());
return(false);
}
//+------------------------------------------------------------------+
Должна быть какая-то причина такого поведения. Надо выдвигать гипотезы и проверять их последовательно. Например:
Hе закралась ли русская буква ('с' или 'е') в каком-то из имён файлов? Можно взять более суровые имена типа "1.bin"
Тот ли это каталог данных? Проверить его открытие из меню терминала или MetaEditor
Считает ли скрипт именно этот каталог текущим? Добавить в начало OnStart() две команды: открыть новый файл с созданием и закрыть его. Посмотреть, что он появился в ожидаемом каталоге
Создал в папке C:\Users\Ya\AppData\Roaming\MetaQuotes\Terminal\FA97EA291D4188820508F9D2B5AAD50F\MQL5\Files файл с таким именем File.csv
Запускаю скрипт.
Файл как и задумано копируется в папку C:\Users\Ya\AppData\Roaming\MetaQuotes\Terminal\FA97EA291D4188820508F9D2B5AAD50F
Всё работает.
К сожалению, ваш код у меня не сработал.
Тогда я еще более упростил задачу: переписать файл внутри песочницы, но с новым именем:
Вот, что он распечатал:
Path = C:\Users\клыков\AppData\Roaming\MetaQuotes\Terminal\F58594996208E46D021F1E606AD322F3
LastPath = C:\Users\клыков\AppData\Roaming\MetaQuotes\Terminal\F58594996208E46D021F1E606AD322F3\MQL5\Files\File.csv
NewPath = C:\Users\клыков\AppData\Roaming\MetaQuotes\Terminal\F58594996208E46D021F1E606AD322F3\MQL5\Files\New_File.csv
Error 0
res = false
Нового файла в папке Files не появилось.
Удивительно, что Error 0 (т.е. ошибки нет), но res = false
Проверял на двух компьютерах, результат одинаковый.
Интересно, сработает ли этот код у вас?
У меня dll разрешены.
Но все же дело, наверное, в каких-то ещё настройках?
К сожалению, ваш код у меня не сработал.
Я не знаю чем вам помочь.
Проверил ещё раз, всё работает.
Как вы можете видеть копирует хоть куда и с разными именами и даже со сменой расширения.
PS Проверьте на наличие файла, может вы где то, что то путаете.
вставьте в начало скрипта
Я не знаю чем вам помочь.
Проверил ещё раз, всё работает.
Как вы можете видеть копирует хоть куда и с разными именами и даже со сменой расширения.
PS Проверьте на наличие файла, может вы где то, что то путаете.
вставьте в начало скрипта
Спасибо за юмор!
Вечером проверю
Спасибо за юмор!
Вечером проверю
Добавил ваш юмор в скрипт, и вот что оказалось:
Хотя в папке Files есть файл File.csv, скрипт его не видит и печатает:
Пошёл на хе..., нет в папке такого файла!
false
false
false
Просто фантастика!!!
Просто фантастика!!!
Нет никакой фантастики.
Сделайте в свойствах папки видимость расширения файлов.
У вас как я вижу файл имеет имя File.csv.txt, а вы пытаетесь найти File.csv, естественно его найти не получается.
Фантастика продолжается.
Взял пример скрипта из документации на FileCopy.
Дополнил его вашей проверкой на существование файла.
Результат аналогичный - скрипт файла не видит.
Здравствуйте, Александр.
Должна быть какая-то причина такого поведения. Надо выдвигать гипотезы и проверять их последовательно. Например:
- Hе закралась ли русская буква ('с' или 'е') в каком-то из имён файлов? Можно взять более суровые имена типа "1.bin"
- Тот ли это каталог данных? Проверить его открытие из меню терминала или MetaEditor
- Считает ли скрипт именно этот каталог текущим? Добавить в начало OnStart() две команды: открыть новый файл с созданием и закрыть его. Посмотреть, что он появился в ожидаемом каталоге
Больше пока не придумалФантастика продолжается.
Ещё раз. Имя файла нужно указывать с расширением этого файла.
Вы создали файл с расширением .txt и с именем File.csv
Значит полное имя файла, которое нужно указать в программе будет таким - File.csv.txt
У вас в винде в свойствах папки отключено отображение расширения файлов, от этого у вас такая путаница с именами файлов.
Нет никакой фантастики.
Сделайте в свойствах папки видимость расширения файлов.
У вас как я вижу файл имеет имя File.csv.txt, а вы пытаетесь найти File.csv, естественно его найти не получается.
Большое спасибо! В этом и была проблема. Без вас я не смог бы найти ошибку. Желаю вам успехов!
Александр, добрый день!
Оказывается, файл нужно обязательно закрывать перед его переписыванием из песочницы в папку Tester.
Иначе не работает.
Долго же я это выяснял!!!
С уважением, Александр