Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 950

 

Teşekkür ederim! Orada bir şey basit değil, bu yüzden herhangi bir şekilde Win API'si olmadan?

 
Aleksey Vyazmikin :

Teşekkür ederim! Orada bir şey basit değil, bu yüzden herhangi bir şekilde Win API'si olmadan?

Ardından MQL5 belgelerinden:

 
Aleksey Vyazmikin :

Teşekkür ederim! Orada bir şey basit değil, bu yüzden herhangi bir şekilde Win API'si olmadan?

Zor olan ne var? İki paragraf okudum ve her şey netleşti.

1. Belirtilen dizindeki, Ortak veya terminal klasöründeki TÜM HERHANGİ dosyaları arayın. Onlara birer birer yol alıyorsunuz.

2. Alınan hat ile çalışırsınız. Bu satırda belirli bir klasörü arar ve belirtilen klasörün adının kaç kez geçtiğini sayarsınız. Bu, klasördeki ve alt klasörlerindeki dosya sayısı olacaktır.

 
Aleksey Vyazmikin :
Lütfen belirtilen MQL5\Files dizinindeki dizinlerin listesini nasıl alacağımı söyler misiniz?
 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);
}

Buradan çekildi. Belki oradaki diğer işlevler yararlı olacaktır.

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 :

Ardından MQL5 belgelerinden:

Teşekkürler ama kullanmakta zorlanıyorum...

 
fxsaber :

Buradan çekildi. Belki oradaki diğer işlevler yararlı olacaktır.

Teşekkürler, kod çalışıyor! Ancak, derin dallanma ve dosya adları olmadan yalnızca belirtilen dizindeki dizin adlarını nasıl alabilirim?

 
Aleksey Vyazmikin :

Teşekkürler, kod çalışıyor! Ancak, derin dallanma ve dosya adları olmadan yalnızca belirtilen dizindeki dizin adlarını nasıl alabilirim?

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

Teşekkürler, ancak belirli bir alt dizinde bir dizini nasıl alacağımı anlayamıyorum, yani. MQL5\Files içinde bir "test" dizini olduğunu biliyorum ve içindeki dizinlere bakmam gerekiyor.

 
Aleksey Vyazmikin :

Teşekkürler, ancak belirli bir alt dizinde bir dizini nasıl alacağımı anlayamıyorum, yani. MQL5\Files'ın " test " dizinini içerdiğini biliyorum ve içindeki dizinlere bakmam gerekiyor.

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

Bunu yaptım, ancak dosyalar da orada listeye giriyor ... dosyaları klasörlerden nasıl ayırt edeceğimiz açık değil.