Справка: комбинация флагов, определяющая режим работы с файлом
Есть некоторые особенности работы при указании флагов чтения и записи:
- Если указан FILE_READ – делается попытка открытия уже существующего файла. Если файл не существует, то открыть файл не получится, новый файл не создается.
- Если FILE_READ|FILE_WRITE – создаётся новый файл если файл с таким именем отсутствует.
- Если FILE_WRITE – файл создается заново с нулевым размером.
То есть если использовать флаг FILE_READ - файл уже должен существовать, в противном случае будет ошибка.
Справка: комбинация флагов, определяющая режим работы с файлом
Есть некоторые особенности работы при указании флагов чтения и записи:
- Если указан FILE_READ – делается попытка открытия уже существующего файла. Если файл не существует, то открыть файл не получится, новый файл не создается.
- Если FILE_READ|FILE_WRITE – создаётся новый файл если файл с таким именем отсутствует.
- Если FILE_WRITE – файл создается заново с нулевым размером.
То есть если использовать флаг FILE_READ - файл уже должен существовать, в противном случае будет ошибка.
так у меня же FILE_READ в коде и файл помещен в нужную папку.
вы пробовали с помощью советника считать этот файл?
Для начала файл 1.csv предоставьте ...
Во вложении, файл 1.zip.
Ловите и не забывайте про кодировки ...
//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright © 2019, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2019, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" //--- input parameters input bool InpFileCommon = false; // "true" - in common folder //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { int filehandle=-1; ResetLastError(); if(InpFileCommon) filehandle=FileOpen("1.csv",FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON); else filehandle=FileOpen("1.csv",FILE_READ|FILE_ANSI|FILE_CSV); if(filehandle!=INVALID_HANDLE) { Print("Operation FileOpen OK"); Print(FileReadString(filehandle)); FileClose(filehandle); } else Print("Operation FileOpen ERROR# ",GetLastError()); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+
Можно тренироваться как с общей папкой так и с папкой по-умолчанию:
input bool InpFileCommon = false; // "true" - in common folder
не забывайте про кодировки ...
а есть какой-то способ чтобы проверить кодировку файла?
ну есть у меня в папке файл. есть какая-то программа, чтобы
показала его кодировку?
Не работает.
Добавил 2 строчки
int Dt =FileReadString(filehandle);
Alert(Dt);
У меня всё работает, а вот Вы вставили свои строчки не подумав - в общем сделали ошибку.
Задание: подумать, КУДА нужно поставить Ваши две строки, чтобы попасть в цикл ФАЙЛ ОТКРЫТ -> ФАЙЛ ОТКРЫТ УСПЕШНО.
У меня всё работает, а вот Вы вставили свои строчки не подумав - в общем сделали ошибку.
Задание: подумать, КУДА нужно поставить Ваши две строки, чтобы попасть в цикл ФАЙЛ ОТКРЫТ -> ФАЙЛ ОТКРЫТ УСПЕШНО.
Работает!
Кажись понял в чем дело. У меня не было флага FILE_ANSI.
просто
в mql4 и без этого флага работало, поэтому я его и не ставил...
//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright © 2019, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2019, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" //--- input parameters input bool InpFileCommon = true; // "true" - in common folder //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { int filehandle=-1; ResetLastError(); if(InpFileCommon) filehandle=FileOpen("1.csv",FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON); else filehandle=FileOpen("1.csv",FILE_READ|FILE_ANSI|FILE_CSV); if(filehandle!=INVALID_HANDLE) { Print("Operation FileOpen OK"); string Dt =FileReadString(filehandle); Alert(Dt); FileClose(filehandle); } else Print("Operation FileOpen ERROR# ",GetLastError()); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+
Но все же...
Вот есть у меня в папке файл 1.csv
Как его проверить, в какой он кодировке? ansi или unicode.
Но все же...
Вот есть у меня в папке файл 1.csv
Как его проверить, в какой он кодировке? ansi или unicode.
Если .. в начале файла будет обнаружен специальный двухбайтовый признак 0xff,0xfe, то флаг кодировки будет FILE_UNICODE, даже если указан флаг FILE_ANSI.
Например при помощи скрипта я создал новый файл в формате Unicode
void OnStart() { int filehandle=FileOpen("2.csv",FILE_WRITE|FILE_CSV|FILE_UNICODE); if(filehandle!=INVALID_HANDLE) { FileWrite(filehandle,TimeCurrent(),Symbol(), EnumToString(_Period)); FileClose(filehandle); Print("FileOpen OK"); } }
и затем открыл файл в hex редакторе - вот в начале файла признак Unicode:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При запуске этого советника, он почему-то удаляет файл "1.csv"
Когда же файл помещаю в общую папку для всех клиентских терминалов, и FileOpen() использую с ключом FILE_COMMON, то иероглифы какие-то показывает.
Советник и csv-файл прилагаю: