Скачать MetaTrader 5

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

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

Здравствуйте, подскажите пожалуйста как в 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++;

}

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

o_o
Модератор
24768
o_o  

PozitiF:

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

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



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

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

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

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

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

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

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

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

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);
}
Vadim Zhunko
5226
Vadim Zhunko  
У меня в DLL с файловыми функциями есть функция FileIs().
Виктор
Модератор
6559
Виктор  
Zhunko:
У меня в DLL с файловыми функциями есть функция FileIs().
Я тебя уже пугаюсь. Прямо что ни спросишь, то и есть. Да еще в каких объемах и с каким серьезным подходом.
Vadim Zhunko
5226
Vadim Zhunko  
granit77:
Я тебя уже пугаюсь. Прямо что ни спросишь, то и есть. Да еще в каких объемах и с каким серьезным подходом.
Да, да... :-)) Есть ещё функция, которая получает список файлов и папок в указанном каталоге, но это в другой библиотеке. :-))
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий