Определить наличие файла, подсчёт файлов

 

Здравствуйте, подскажите пожалуйста как в mql4 можно подсчитать количество файлов в папке и можно ли вообще, перерыл кучу сообщений и тем но ответа так и не нашёл.

И ещё вопрос как можно проверить существование файла без его открытия.

Теперь опишу для чего мне это вообще надо, задумал я написать новостной календарь в терминал (чтобы прямо на графике отображались важные новости) и хочу чтобы новости хранились не в одном файле а допустим с именем 23.05.2011.csv (это если есть возможность определять количество файлов и их имя в директории), но если такой возможности нет то имена файлов будут такими News_0, News_1 и.т.д

Спросите зачем мне это надо можно и в одном файле, дык в одном файле некрасиво и скоро он станет ну оч большим да и заполнять не айс, и хочется чтоб прошлые исторические данные на графике отображались, а если какая то история уже не требуется то просто взял и удалил некоторые старые файлы.

Вот я и подошёл ко второму вопросу, как мне в цикле организовать открытие файла сразу с проверкой, то есть даже не открытие а просто проверка есть ли такой файл или нет.

Пробовал таким способом

while (handle=FileOpen(F_Name,FILE_CSV|FILE_READ,';'))

но вылазит ошибка, я хотел чтоб инструкция выглядела примерно так

int cx=0, handle;
string F_Name;

//----

F_Name = FileName+cx;

while (handle=FileOpen(F_Name,FILE_CSV|FILE_READ,';'))

{

Здесь мы выводим на график новости.

и при следующей итерации должен открыватся уже следующий файл.

F_Name = FileName+cx;

cx++;

}

Буду очень признателен за помощь.

 

PozitiF:

Пробовал таким способом

while (handle=FileOpen(F_Name,FILE_CSV|FILE_READ,';'))



while так не поймет. проверяйте конкретно handle с возможным результатом FileOpen
 
sergeev:

while так не поймет. проверяйте конкретно handle с возможным результатом FileOpen

Да я так и подумал, просто я не могу придумать как это дело в цикл засунуть. Сначала я должен попробовать открыть файл News_0 если открылся то выполняем код для отображения на графике, после должен увеличится счётчик и попробовать открыть следующий файл, это ведь должно быть в цикле. Похоже торможу конкретно (, Если честно знаю и владею на приемлемом уровне многими языками программирования, но тут прям завис как-то :-(
 
PozitiF:

Да я так и подумал, просто я не могу придумать как это дело в цикл засунуть. Сначала я должен попробовать открыть файл News_0 если открылся то выполняем код для отображения на графике, после должен увеличится счётчик и попробовать открыть следующий файл, это ведь должно быть в цикле. Похоже торможу конкретно (, Если честно знаю и владею на приемлемом уровне многими языками программирования, но тут прям завис как-то :-(

пользучтесь break или continue для принудительных переходах в циклах.
 
sergeev:

пользучтесь break или continue для принудительных переходах в циклах.

Вроде бы можно ещё использовать статическую переменную, то есть запустили индюк пошёл выполнятся код выполнился и ждём тика на следующий запуск запустились увеличили статическую переменную на 1 и пошли считывать следующий файл, а если его нету то ничего не делаем, ждём просто пока данный файл не появится ) ? как по вашему так правильно будет ?
 
Статейка вам в помощь https://www.mql5.com/ru/articles/1543
 
Открыть для чтения и записи, проверить размер, если размер 0 - удалить. Если размер не 0, значит файл существует.
 

Спасибо всем кто откликнулся, спасибо за дельные советы, но решил всё же по своему, выкладываю код надеюсь кому пригодится.

extern string Directory = "News";
extern string FileName = "News_";

int start()
{
  int handle;
  string F_Name, Expansion = ".csv" ;
  static int st=0;
//----
  F_Name = Directory + "/" + FileName + st + Expansion;
  handle=FileOpen(F_Name,FILE_CSV|FILE_READ,';'); // Пробуем открыть файл News_0.csv

  if(handle < 0) // если файл открыли то продолжаем, иначе завершаем, и каждый новый тик проверям наличие файла News_0.csv.
  {
    return(false);
  }

  while()
 {

    Тут Основной код вывода на график.
 }

FileClose (handle);
st++;
//----
return(0);
}
 
У меня в DLL с файловыми функциями есть функция FileIs().
 
Zhunko:
У меня в DLL с файловыми функциями есть функция FileIs().
Я тебя уже пугаюсь. Прямо что ни спросишь, то и есть. Да еще в каких объемах и с каким серьезным подходом.
 
granit77:
Я тебя уже пугаюсь. Прямо что ни спросишь, то и есть. Да еще в каких объемах и с каким серьезным подходом.
Да, да... :-)) Есть ещё функция, которая получает список файлов и папок в указанном каталоге, но это в другой библиотеке. :-))
Причина обращения: