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

 

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

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

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

Автор: MetaQuotes Software Corp.

 

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

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

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



 
Ilnur:

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

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

Спасибо, поправил.
 

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

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

этот:

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);
      }

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

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

*

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

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

 
Небольшое замечание - FindFirstFile возвращает не указатель на найденный файл, а его хендл (HANDLE), который к указателям отношения не имеет. Хендл - это просто идентефикатор, который создается ОС и не имеет никакой привязки к адресам, как указатель. 
 

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

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

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

 

https://www.mql5.com/ru/forum/6049#comment_5405849

Обсуждение статьи "Избавляемся от балласта самодельных DLL"
Обсуждение статьи "Избавляемся от балласта самодельных DLL"
  • 2012.01.31
  • www.mql5.com
В MQL5 имеется механизм представления разных типов данных с помощью структур и передачи их в API, но к сожалению, MQL5 не отвечает нам на вопрос о том, как вытянуть данные из принятого указателя.
Причина обращения: