Учусь открывать файлы. Функция FileOpen()

2 сентября 2015, 10:41
capricornsuper
1
69

Вчера делал следующий шаг. Решил научиться открывать файлы. Открывает файлы функция FileOpen(). В принципе, ничего сложного нет. В скобки к ней достаточно  вписать имя файла, поставить запятую, и вписать флаг или флаги, которые приказывают: для чего открывать файл: для чтения, для записи; файл какого типа открыть: .csv, .txt или какой-нибудь другой тип; в какой кодировке: ANSI, UNICODE ну и еще много всяких разных флагов. Этих двух параметров: имя файла и флаг, достаточно, чтобы функция открыла файл. Более детально с функцией FileOpen() можно познакомиться на ее страничке Там и флаги все перечислены, и параметры, и даже пример приведен.

Если файл будет открыт успешно, то функция возвращает хэндл файла. Если неудача, то возвращается INVALID_HANDLE значение которого  -1. Что же это за хэндл такой? Для чего он? Порылся в интернете и выяснил, что хэндл - это число, которое является указателем на файл (это в нашем частном случае, а вообще в программировании хэндл может быть указателем на много чего: окна, процессы, битмэпы и др.). Что же мне нужно в сухом остатке по термину хэндл? Хэндл используется для доступа к данным файла и для закрытия файла функцией FileClose() 

Насытившись теорией, приступил к практике. Сначала поместил в директорию ТЕРМИНАЛ_МТ4/MQL4/Files файл news.csv . И потом быстренько сварганил код:

int filehandle;
filehandle=FileOpen("news.csv",FILE_READ);
Print("Файл открыт успешно. Хендл файла=", filehandle);

Запускаю компилятор и ПУФФФФ! Ошибка. Оказывается я ввел имя файла без кавычек, а надо брать в кавычки "имя_файла". Исправил код, кинул скрипт на график и заработало. В переменную filehandle отправлено значение 1. Мозг срочно затребовал новых приключений и я не смог встать у него на пути. Пальцы забарабанили по клавишам и добавили еще 2 строки кода

filehandle=FileOpen("news150901.csv",FILE_READ);
Print("Файл открыт успешно. Хендл файла=", filehandle);

Компилирую. Все ОК. Кидаю скрипт на график и опаньки. В первой строке значение переменной filehandle 1, а во второй -1. Но -1 - это же что-то неправильно. Оказалось, что настрочить строку кода с именем файла news150901.csv - недостаточно. Надо было еще сам файл такой сделать и в директорию с файлами его закинуть. Сделал, закинул. Запустил скрипт и все заработало. В первой строке получил значение filehandle 1, а во второй 2. Вот теперь сижу и размышляю, а правильно-ли я поступил, что хэндлы, созданные при открытии разных файлов я записал в одну переменную? Пойду на форум, спрошу у опытных кодеров правильный ответ.