Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

CDir (MT5) - die Klasse für das Erhalten des Titels des Katalogs - Bibliothek für den MetaTrader 5

Ansichten:
791
Rating:
(20)
Veröffentlicht:
2017.04.03 10:25
\MQL5\Include\WIN_API\
Dir_API.mqh (16.64 KB) ansehen
\MQL5\Scripts\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Manchmal entsteht die Notwendigkeit, die Grenzen "des Sandkasten" zu überschreiten und den Titel des Katalogs zu lesen, das Vorhandensein der Datei oder des Katalogs im Dateisystem zu prüfen. Auch kann es gefordert werden, die Attribute der Datei oder des Verzeichnisses, den Umfang der Datei, die Zeit ihrer Erstellung, den letzten Zugang zu ihr oder die Aufzeichnung zu erfahren. Das Beispiel der möglichen Lösung solcher Aufgaben wird durch diesen Code vorgestellt:

Der Standardprolog und die Beschreibung der Variable, sowie der Link zum Anfangscode der hinzugefügten Klasse #include <win_api\dir_api.mqh> - ist ein offenbarer Hinweis dem Compiler, dass diese Datei im Verzeichnis \MQL5\Include\WIN_API gesucht werden soll. Sie sind frei, diesen Link je nach Ihren Präferenzen in der Organisation der Arbeit mit den hinzugefügten Dateien zu ändern, abgesehen von Dokumentation .

//+------------------------------------------------------------------+
//|                                            ExampleDirClass.mq4/5 |
//|                                        Copyright © 2017, Avatara |
//|                            https://www.mql5.com/en/users/avatara |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Avatara"            2017/02/12
#property link      "https://www.mql5.com/en/users/avatara"
#property description "-- Example Dir Class --------------"
#property strict
#include <WIN_API\Dir_API.mqh> 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   File_Def File;            // work structure
   CDir Dir; int total,i;     
   string path = TerminalInfoString(TERMINAL_COMMONDATA_PATH)+
               "\\..\\..\\Terminal";
//---    
  

Wie wir sehen, enthält die Zeile-Variabel path den Weg zum Ordner, der sich auf zwei Ebenen höher als die Standardanordnung des Katalogs des gestarteten Terminales befindet, und wir werden (falls die Option /portable nicht verwendet wurde) den Weg zum Katalog bekommen, der die Anwenderdaten aller Kundenterminale dieses Benutzers enthält.

Der nachdenkliche Leser wird sagen, dass wir die überflüssigen Körperbewegungen machen - genug wäre, auf eine Ebene höher zu steigen, und wir sind im nötigen Katalog. Ja, aber was ist, wenn wir wollen, die Navigation zu einem anderen Katalog zu verwirklichen - zum Beispiel: Crashes oder Tester? Für unser Beispiel, es ist lehrreicher.

Wir gehen zum Code des Beispiels zurück.

/---    
   total = Dir.Create(path);       // init dir
   Print (path," Total=",total-3); //Common,Help && Community not calc
    for (i = 0;i<total;i++)
    {
     string nameFile = Dir.GetNameFile(i);
     if(nameFile == "Common"||nameFile=="Help"||nameFile=="Community")
                                                              continue;
     File = Dir.GetStruct(i);
     Print (StringFormat ("%37s \t%8X\t  %5s\t",nameFile,
     File.FileAttributes,File.isDir?"-SubDir-":""),
     File.isDir?"            ":IntegerToString(File.FileLength,12),
     File.CreationTime,"     ",File.LastWriteTime,"     ",
     File.LastAccessTime);
    }
    Dir.Clear(); 
//---    

Wenn wir ein Exemplar der Klasse erstellen, wir werden in der Variabel total die Anzahl der Elemente (der Dateien oder der Unterverzeichnisse) bekommen. Wenn wir schon die Loop erstellt haben, drucken wir die Kataloge-Liste der Terminalen (überspringend die allgemeinen Verzeichnisse). Den Zugang zu den Daten des Exemplars illustrieren wir durch den Zugang zur Kopie der Arbeitsstruktur der Klasse-Daten File.

  path=TerminalInfoString(TERMINAL_PATH)+
              "\\..";
    Dir.Create(path,"\\M*");   // use filter "M*"       
    Print ("Alternative access:");
    total = Dir.Size(); 
    Print (Dir.Path," Total=",total);
    for (i = 0;i<total;i++)
    {
    Print  (StringFormat("%57s \t%8X \t %s \t",Dir.GetNameFile(i), 
                         Dir.GetStruct(i).FileAttributes,
                         Dir.isDir(i)?"--- SubDir ---": 
                         IntegerToString(Dir.GetFileLength(i),14)),
    "\t   Last modify: ",Dir.GetLastWriteTime(i));
    }
//---    
    Dir.Clear();  

Auf dem Beispiel des Ausdrucks des Titel-Teiles des Verzeichnisses (wird die Selektionen der Elemente verwendet, die am Anfang des Namens den Buchstaben M enthalten) werden andere Methoden der Arbeit mit den Elementen der Klasse demonstriert.

Und zunächst ist der Teil des Kodes, wo wir das Vorhandensein der konkreten Datei prüfen und ihre Länge erfahren.

//---  Use to check the file
    path="C:";
    Print("------------ Use to check the file ---------------------");
    stringfilter="\\pagefile.sys";
    Dir.Create(path,filter);
    total=Dir.Size();
    PrintFormat("Find %d entry.",total);
    if(total>0)
      for(i =0;i<total;i++)Print("File search \"",path,filter,
        "\" is return:",Dir.isDir(i)?"--- SubDir ---  "+
        Dir.GetNameFile(i):Dir.GetNameFile(i)+
        IntegerToString(Dir.GetFileLength(i),14)+" byte. \t",
        StringFormat("Atributes=%X",Dir.GetAtributes(i)));
    else  Print("File ",path,filter," is absent.");
//---
    Dir.Clear();              

Wir beenden den Test-Skript mit dem Beispiel der Link-Verwendung auf dem Exemplar der Klasse der Elementen-Speicherung des Titels des Verzeichnisses:

  //--- use pointer to access data

   path="C:\\Temp";

    //---------------------> pointer declarate     CDir_API *e;        Print("------ Pointer use example. --------");     total =Dir.Create(path);     PrintFormat("%s       Find %d entry.",path,total);     if(total>0)       for(i =0;i<total;i++)       {       e=Dir.GetPointers(i);       Print(StringFormat("%77s \t%8X\t  %5s\t ",e.Name_File,           e.FileDef.FileAttributes,e.FileDef.isDir?"-SubDir-":""),           e.FileDef.isDir?"         ":           IntegerToString(e.FileDef.FileLength,12),"   ",           e.FileDef.CreationTime,"     ",           e.FileDef.LastWriteTime,"     ",           e.FileDef.LastAccessTime);       }       else  Print("File ",path,filter," is absent."); //---     Dir.Clear();     Print("------------- The end. -----------------------"); } //+------------------------------------------------------------------+

Ich bezweifle nicht, dass die Mehrheit der Leser gerade diese Weise des Zuganges zu den Daten der Klasse in der Arbeit benutzen werden.

Für das Entziffern der Attribute kann die zusätzlichen Angaben gefordert werden:

FILE_ATTRIBUTE_ARCHIVE 32 (0x20) A file or directory that is an archive file or directory. Applications typically use this attribute to mark files for backup or removal.
FILE_ATTRIBUTE_COMPRESSED 2048 (0x800) A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories.
FILE_ATTRIBUTE_DEVICE 64 (0x40) This value is reserved for system use.
FILE_ATTRIBUTE_DIRECTORY 16 (0x10) The handle that identifies a directory.
FILE_ATTRIBUTE_ENCRYPTED 16384 (0x4000) A file or directory that is encrypted. For a file, all data streams in the file are encrypted. For a directory, encryption is the default for newly created files and subdirectories.
FILE_ATTRIBUTE_HIDDEN 2 (0x2) The file or directory is hidden. It is not included in an ordinary directory listing.
FILE_ATTRIBUTE_INTEGRITY_STREAM 32768 (0x8000)

The directory or user data stream is configured with integrity (only supported on ReFS volumes). It is not included in an ordinary directory listing. The integrity setting persists with the file if it's renamed. If a file is copied the destination file will have integrity set if either the source file or destination directory have integrity set.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This flag is not supported until Windows Server 2012.

FILE_ATTRIBUTE_NORMAL 128 (0x80) A file that does not have other attributes set. This attribute is valid only when used alone.
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 8192 (0x2000) The file or directory is not to be indexed by the content indexing service.
FILE_ATTRIBUTE_NO_SCRUB_DATA 131072 (0x20000)

The user data stream not to be read by the background data integrity scanner (AKA scrubber). When set on a directory it only provides inheritance. This flag is only supported on Storage Spaces and ReFS volumes. It is not included in an ordinary directory listing.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This flag is not supported until Windows 8 and Windows Server 2012.

FILE_ATTRIBUTE_OFFLINE 4096 (0x1000) The data of a file is not available immediately. This attribute indicates that the file data is physically moved to offline storage. This attribute is used by Remote Storage, which is the hierarchical storage management software. Applications should not arbitrarily change this attribute.
FILE_ATTRIBUTE_READONLY 1 (0x1) A file that is read-only. Applications can read the file, but cannot write to it or delete it. This attribute is not honored on directories. For more information, see You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, in Windows Vista or in Windows 7.
FILE_ATTRIBUTE_REPARSE_POINT 1024 (0x400) A file or directory that has an associated reparse point, or a file that is a symbolic link.
FILE_ATTRIBUTE_SPARSE_FILE 512 (0x200) A file that is a sparse file.
FILE_ATTRIBUTE_SYSTEM 4 (0x4) A file or directory that the operating system uses a part of, or uses exclusively.
FILE_ATTRIBUTE_TEMPORARY 256 (0x100) A file that is being used for temporary storage. File systems avoid writing data back to mass storage if sufficient cache memory is available, because typically, an application deletes a temporary file after the handle is closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written after the handle is closed.
FILE_ATTRIBUTE_VIRTUAL 65536 (0x10000) This value is reserved for system use.

Ich hoffe, dass dieses Beispiel, wie auch die Klasse Ihnen nützlich sein wird, und ich war nicht langweilig mit meinen Erklärungen... ;)

Viel Spaß!

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/17623

HistoryPositionInfo HistoryPositionInfo

Es liefert den Gewinn der Positionen in Punkten aufgrund der Handelshistory zurück.

TypePendingOrderTriggered TypePendingOrderTriggered

Das Beispiel für die Bestimmung des Moments, in dem eine Pending Order ausgelöst wurde.

XRSXCandleKeltnerPluse XRSXCandleKeltnerPluse

Der Indikator XRSXCandleKeltner mit der Indikationsmöglichkeit des Durchbruchs

XCCXCandleKeltnerPluse XCCXCandleKeltnerPluse

Der Indikator XССXCandleKeltner mit der Indikationsmöglichkeit des Durchbruchs.