Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 950

 

Ich danke Ihnen! Es ist nicht so einfach dort, so dass keine Möglichkeit, es ohne Win API zu tun?

 
Aleksey Vyazmikin:

Ich danke Ihnen! Es ist nicht so einfach dort, so dass keine Möglichkeit, es ohne Win API zu tun?

In diesem Fall lesen Sie bitte die MQL5-Dokumentation:

 
Aleksey Vyazmikin:

Ich danke Ihnen! So einfach ist es nicht, also geht es nicht ohne Win API?

Was ist daran so kompliziert? Ich habe zwei Absätze gelesen, und es macht alles Sinn.

1. Suche nach ALLEN ALLEN Dateien in einem bestimmten Verzeichnis, Common oder Terminalordner. Sie erhalten den Weg zu ihnen, einen nach dem anderen.

2. Arbeiten Sie mit dieser Linie. Suchen Sie den angegebenen Ordner in dieser Zeile und zählen Sie, wie oft der angegebene Ordnername vorkommt. Dies ist die Anzahl der Dateien in dem Ordner und seinen Unterordnern.

 
Aleksey Vyazmikin:
Können Sie mir bitte sagen, wie ich eine Liste der Verzeichnisse im angegebenen Verzeichnis MQL5\Files erhalte?
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);
}

Entnommen von hier. Vielleicht werden dort andere Funktionen nützlich sein.

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:

Dann aus der MQL5-Dokumentation:

Danke, aber es ist noch schwer, sich zu bewerben...

 
fxsaber:

Entnommen von hier. Vielleicht werden die anderen Funktionen dort nützlich sein.

Danke, der Code funktioniert! Und wie erhält man nur die Verzeichnisnamen im angegebenen Verzeichnis, ohne Tiefenverzweigung und Dateinamen?

 
Aleksey Vyazmikin:

Danke, der Code funktioniert! Aber wie erhält man nur die Verzeichnisnamen im angegebenen Verzeichnis, ohne Tiefenverzweigung und Dateinamen?

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

Danke, aber ich kann nicht herausfinden, wie man ein Verzeichnis in einem bestimmten Unterverzeichnis abruft, d. h. ich weiß, dass MQL5-Files ein "Test"-Verzeichnis hat, und ich muss mir die Verzeichnisse darin ansehen.

 
Aleksey Vyazmikin:

Danke, aber ich kann nicht herausfinden, wie man ein Verzeichnis in einem bestimmten Unterverzeichnis abruft, d. h. ich weiß, dass MQL5Files ein"Test"-Verzeichnis hat, und ich muss mir die Verzeichnisse in diesem Verzeichnis ansehen.

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

Das habe ich getan, aber die Dateien sind dort auch aufgeführt... wie man Dateien von Ordnern unterscheiden kann, ist unklar.

Grund der Beschwerde: