초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 950

 

고맙습니다! 뭔가 간단하지 않습니다. 그래서 어떤 식 으로든 Win API가 없습니까?

 
Aleksey Vyazmikin :

고맙습니다! 뭔가 간단하지 않습니다. 그래서 어떤 식 으로든 Win API가 없습니까?

그런 다음 MQL5 문서에서:

 
Aleksey Vyazmikin :

고맙습니다! 뭔가 간단하지 않습니다. 그래서 어떤 식 으로든 Win API가 없습니까?

뭐가 어렵나요? 나는 두 단락을 읽었고 모든 것이 명확해졌습니다.

1. 지정된 디렉토리, Common 또는 터미널 폴더 에서 모든 파일을 찾습니다. 당신은 그들에게 하나 하나의 경로를 얻을.

2. 수신된 라인으로 작업합니다. 이 줄에서 주어진 폴더를 찾고 지정된 폴더의 이름이 몇 번 나오는지 계산합니다. 이것은 폴더와 그 하위 폴더에 있는 파일의 수입니다.

 
Aleksey Vyazmikin :
지정된 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);
}

여기 에서 뽑아 . 아마도 다른 기능이 유용할 것입니다.

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 :

그런 다음 MQL5 문서에서:

감사합니다만 사용이 어렵네요...

 
fxsaber :

여기 에서 뽑아 . 아마도 다른 기능이 유용할 것입니다.

감사합니다. 코드가 작동합니다! 그러나 깊은 분기 및 파일 이름 없이 지정된 디렉토리에서만 디렉토리 이름을 얻는 방법은 무엇입니까?

 
Aleksey Vyazmikin :

감사합니다. 코드가 작동합니다! 그러나 깊은 분기 및 파일 이름 없이 지정된 디렉토리에서만 디렉토리 이름을 얻는 방법은 무엇입니까?

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

감사합니다. 하지만 특정 하위 디렉터리에 디렉터리를 가져오는 방법을 알 수 없습니다. MQL5\Files에 "test" 디렉토리가 있다는 것을 알고 있고 그 디렉토리를 살펴봐야 합니다.

 
Aleksey Vyazmikin :

감사합니다. 하지만 특정 하위 디렉터리에 디렉터리를 가져오는 방법을 알 수 없습니다. MQL5\Files에 " test " 디렉토리가 있다는 것을 알고 있고 그 안에 있는 디렉토리를 살펴봐야 합니다.

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

그렇게 했지만 파일도 거기 목록에 들어갑니다... 파일과 폴더를 구별 하는 방법은 명확하지 않습니다.

사유: