Скачать MetaTrader 5

Знатоки ! А как вы определяете существует ли файл с таким-то именем в таком-то каталоге или нет ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подпишись на сигнал прямо в MetaTrader. Это просто!
L_E_O
714
L_E_O 2012.04.24 16:23 
Интересно именно применение WinAPI !
Комбинатор
15923
Комбинатор 2012.04.24 16:28  
Даже WinAPI не надо. Попытаться открыть для чтения.
L_E_O
714
L_E_O 2012.04.24 16:33  
TheXpert:
Даже WinAPI не надо. Попытаться открыть для чтения.


Представь: ты открыл файл для чтения, тебе ошибку не выдали - значит файл существует. Хорошо ! Что ты будешь делать дальше ? закрывать его и открывать для записи ?!

А мне просто надо определить: существует такой-то файл и если да то я уже его открою как надо: для чтения, для записи или т.п. ...

Комбинатор
15923
Комбинатор 2012.04.24 16:59  

Пле, гурманы пошли, изыски подавай. Выбирай, ихъ у нас тоже есть.

На выбор варианты 3 4 7 8. 8 это тот что я предложил. Самый оптимальный имхо через GetFileAttributesExA

L_E_O
714
L_E_O 2012.04.24 17:16  
TheXpert:

Пле, гурманы пошли, изыски подавай. Выбирай, ихъ у нас тоже есть.

На выбор варианты 3 4 7 8. 8 это тот что я предложил. Самый оптимальный имхо через GetFileAttributesExA


А где скрывается: GetFileAttributesExA ?!

В user32 или в kernel32 ?!

Комбинатор
15923
Комбинатор 2012.04.24 17:22  
L_E_O
714
L_E_O 2012.04.24 17:24  

Вообщем получилось вот с такой функцией:

#import "kernel32.dll" int GetFileAttributesA (string FileName);

Она при существовании файла почему-то возвращает значение 32 !?


Комбинатор
15923
Комбинатор 2012.04.24 17:28  
LEOK:

Она при существовании файла почему-то возвращает значение 32 !?

Необязательно. Она возвращает сборку флагов атрибутов. Если файла нет, будет -1. Про атрибуты подробнее можно в msdn почитать.
L_E_O
714
L_E_O 2012.04.24 17:32  

А по этой ссылке есть исходник программы. Не в курсе, что она делает ?
Комбинатор
15923
Комбинатор 2012.04.24 17:45  
LEOK:
Не в курсе, что она делает ?
Поисковики рулят, честно :) -- https://www.mql5.com/en/code/10615
L_E_O
714
L_E_O 2012.04.24 19:31  

Вообщем, получилось так:

#import "kernel32.dll" 
      int   MoveFileA           (string FromFileName, string ToFileName);
      int   GetFileAttributesA  (string FileName);
      bool  DeleteFileA         (string FileName);
      int   _lcreat             (string path, int attrib);
      int   _lopen              (string path, int of);
      int   _lclose             (int handle);
#import
      
int start() {
      string a = StringConcatenate (TerminalPath(),"\\test.txt");
      if (GetFileAttributesA(a) == -1) {int h = _lcreat (a,0); _lclose (h);}
      return(0);
}

Если файл не существует, то создаём.

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