Скачать MetaTrader 5

Примеры: Групповые файловые операции

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Много подписчиков на сигнале? Задумайся о платной подписке!
MetaQuotes Software Corp.
Модератор
181059
MetaQuotes Software Corp. 2008.07.15 08:13 

Новая статья Групповые файловые операции опубликована:

Иногда требуется проделать одинаковые операции для некоторой группы файлов. Если у вас есть список файлов, входящих в эту группу, то это не проблема. Но если этот список нужно получить самостоятельно, то возникает вопрос: "Каким образом?" В статье предлагается сделать это с помощью функций FindFirstFile() и FindNextFile(), входящих в библиотеку kernel32.dll.

Прочитать или записать один файл не является проблемой. Даже если при этом придется использовать WinAPI, как это описано в статье Файловые операции через WinAPI. Но что делать, если мы не знаем точного имени файла, известно только его местонахождение в определенной папке и задано расширение? Можно вручную каждый раз вводить нужное имя в виде параметра, но если таких файлов будет пять, десять или более? Нужен способ групповой обработки однотипных файлов в указанной папке. Для этого хорошо подходят функции FindFirstFile(), FindNextFile() и FindClose(), входящие в библиотеку kernel32.dll.

Автор: MetaQuotes Software Corp.

Ilnur Iksanov
5798
Ilnur Iksanov 2008.08.28 22:53  

Хороший пример того, как средствами MQL4 передавать во внешнюю DLL указатель на структуру.

В этой строке опечатка:  "Оказывается, что FILETIME состоит из двух DWORD, а значит DWORD - это 8 байт. Запишем все это в таблицу:"  

Правильно:  "Оказывается, что FILETIME состоит из двух DWORD, а значит FILETIME - это 8 байт. Запишем все это в таблицу:"



Rashid Umarov
Админ
11812
Rashid Umarov 2008.08.29 08:38  
Ilnur:

В этой строке опечатка: "Оказывается, что FILETIME состоит из двух DWORD, а значит DWORD - это 8 байт. Запишем все это в таблицу:"

Правильно: "Оказывается, что FILETIME состоит из двух DWORD, а значит FILETIME - это 8 байт. Запишем все это в таблицу:"

Спасибо, поправил.
kombat
3276
kombat 2009.08.17 00:06  

А что? ни у кого не было такого, что не читается первый файл в папке???

Код скопирован копи-паст, и единственное для удобства заменен принт на алерт.

этот:

int handle = FindFirstFileA(TerminalPath() + "\experts\*.mq4",win32_DATA);
   Print(bufferToString(win32_DATA));
   ArrayInitialize(win32_DATA,0);
 
   while (FindNextFileA(handle,win32_DATA))
      {
      Alert(bufferToString(win32_DATA));
      ArrayInitialize(win32_DATA,0);
      }

ага... в принтах таки есть первый файл!

оно и правильно, его печаиает "первый" принт, а в алерте уже со второго до последнего.

*

блин! а как же сделать что-б за цикл алерт показал все файлы???

В совете заменить первый принт на алерт не нуждаюсь... ;)))

Alexey Volchanskiy
16737
Alexey Volchanskiy 2012.03.03 09:16  
Небольшое замечание - FindFirstFile возвращает не указатель на найденный файл, а его хендл (HANDLE), который к указателям отношения не имеет. Хендл - это просто идентефикатор, который создается ОС и не имеет никакой привязки к адресам, как указатель. 
Alexander
343
Alexander 2015.04.17 17:40  

К сожалению, скрипт из статьи CheckFindFile.mq4 не работает в современных билдах MQL4.

Может кто-нибудь поправить его или подсказать что нужно поправить?

Пробовал поменять винапи функции на юникодные, после этого появились принты в журнале, но это не список файлов, а английский алфавит

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий