Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
L_E_O
714
L_E_O  
Интересно именно применение WinAPI !
Комбинатор
16106
Комбинатор  
Даже WinAPI не надо. Попытаться открыть для чтения.
L_E_O
714
L_E_O  
TheXpert:
Даже WinAPI не надо. Попытаться открыть для чтения.


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

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

Комбинатор
16106
Комбинатор  

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

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

L_E_O
714
L_E_O  
TheXpert:

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

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


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

В user32 или в kernel32 ?!

Комбинатор
16106
Комбинатор  
L_E_O
714
L_E_O  

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

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

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


Комбинатор
16106
Комбинатор  
LEOK:

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

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

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

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

#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
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий