Questions des débutants MQL5 MT5 MetaTrader 5 - page 950

 

Merci ! Ce n'est pas si facile là-bas, donc aucun moyen de le faire sans l'API Win ?

 
Aleksey Vyazmikin:

Merci ! Ce n'est pas si facile là-bas, donc aucun moyen de le faire sans l'API de Win ?

Dans ce cas, lisez la documentation de MQL5 :

 
Aleksey Vyazmikin:

Merci ! Ce n'est pas si simple, vous ne pouvez donc pas le faire sans Win API ?

Qu'est-ce qu'il y a de si compliqué ? Je lis deux paragraphes et tout s'explique.

1. rechercher TOUS les fichiers ANY dans un répertoire, un dossier commun ou terminal spécifié. Vous obtenez le chemin vers eux, un par un.

2. Travaillez avec cette ligne. Recherchez le dossier spécifié dans cette ligne et comptez combien de fois le nom du dossier spécifié apparaît. Ce sera le nombre de fichiers dans le dossier et ses sous-dossiers.

 
Aleksey Vyazmikin:
Pouvez-vous me dire comment obtenir une liste de répertoires dans le répertoire spécifié MQL5\Files ?
string GetDirectory( const string FileName )
{
  int Pos = ::StringFind(FileName, "\\");
  int LastPos = Pos;

  while (Pos >= 0)
  {
    LastPos = Pos;

    Pos = ::StringFind(FileName, "\\", Pos + 1);
  }

  return((LastPos >= 0) ? ::StringSubstr(FileName, 0, LastPos + 1) : "");
}

// Получает список всех директорий (c поддиректориями) песочницы
int GetDirectories( string &Directories[], int Pos = 0, string Filter = "*", const int Common_Flag = 0 )
{
  string FileName;
  const long handle = ::FileFindFirst(Filter, FileName, Common_Flag);

  if (handle != INVALID_HANDLE)
  {
    const string Directory = ::GetDirectory(Filter);
    Filter = ::StringSubstr(Filter, ::StringLen(Directory));

    do
    {
      const string TmpFileName = Directory + FileName;

      if (!::FileIsExist(TmpFileName, Common_Flag) && (::GetLastError() == ERR_FILE_IS_DIRECTORY)) // https://www.mql5.com/ru/forum/1111/page2337#comment_9723503
      {
        ::ResetLastError();
        
        ::ArrayResize(Directories, Pos + 1, 10000);
        Directories[Pos] = TmpFileName;
        Pos++;

        Pos = ::GetDirectories(Directories, Pos, TmpFileName + Filter, Common_Flag);
      }
    }
    while (::FileFindNext(handle, FileName));

    ::FileFindClose(handle);
  }

  return(Pos);
}

void OnStart()
{
  string Folders[];
  
  GetDirectories(Folders);
  
  ArrayPrint(Folders);
}

Tiré d'ici. Peut-être d'autres fonctions y seront-elles utiles.

MQL5 Site / file.mqh - Скачать бесплатно скрипт 'ThirdPartyTicks' от 'fxsaber' для MetaTrader 5 в MQL5 Code Base
  • www.mql5.com
class FILE { private:   static int GetFileNames( string &FileNames[], int Pos = 0, string Filter = "*", const int Common_Flag = 0 )   {       string FileName;       const long handle = ::FileFindFirst(Filter, FileName, Common_Flag);       if (handle != INVALID_HANDLE)       {         const string Directory = FILE::GetDirectory(Filter...
 
Vladimir Karputov:

Puis, à partir de la documentation de MQL5 :

Merci, mais c'est encore difficile à appliquer...

 
fxsaber:

Tiré d'ici. Peut-être les autres fonctions seront-elles utiles.

Merci, le code fonctionne ! Et comment obtenir uniquement les noms des répertoires dans le répertoire spécifié, sans ramification en profondeur et sans noms de fichiers ?

 
Aleksey Vyazmikin:

Merci, le code fonctionne ! Mais comment obtenir uniquement les noms des répertoires dans le répertoire spécifié, sans ramification en profondeur et sans noms de fichiers ?

//        Pos = ::GetDirectories(Directories, Pos, TmpFileName + Filter, Common_Flag);
 
fxsaber:

Merci, mais je n'arrive pas à trouver comment obtenir un répertoire dans un sous-répertoire spécifique, c'est-à-dire que je sais que MQL5\Files a un répertoire "test" et j'ai besoin de regarder les répertoires qui s'y trouvent.

 
Aleksey Vyazmikin:

Merci, mais je n'arrive pas à trouver comment obtenir un répertoire dans un sous-répertoire spécifique, c'est-à-dire que je sais que MQL5\Files a un répertoire"test" et j'ai besoin de regarder les répertoires qui s'y trouvent.

  GetDirectories(Folders, 0, "test\\*");
 
fxsaber:

C'est ce que j'ai fait, mais les fichiers y sont également répertoriés... comment distinguer les fichiers des dossiers n'est pas clair.

Raison: