Ordner nach Textfiles suchensuchen

Smazze

Level-1
Beiträge
22
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Freunde,
weiß einer von euch ob es eine Möglichkeit gibt mit CodeSys einen Ordner nach Textfiles zu durchsuchen?
Die Namen der gefundenen Dateien sollten dann in einem Stringarray (denk ich am besten) gespeichert werden.

Wäre für jede Anregung dankbar!!
 
Moin, ich bin aktuell auf der selben suche =)
Bei TC2/3 geht das recht einfach mit "FB_EnumFindFileList".

hier ist noch mein Thema dazu - garnicht so alt. Bisher noch gute Idee
FB_EnumFindFileList unter CODESYS V3.5

Da es sich in meinem Fall nur um Daten handelt die ich Kenne ist es nicht so wild - ich nutze einfach FILE.Open. Versuche sie zu öffnen (wenn das geht wieder schließen und in Liste eintragen) Wenn ein fehler kommt ist die Datei nicht vorhanden.

Leider echt kein schöner Weg aber aktuell ein Weg zum Ziel bei mir.

MfG Hendrik
 
Moin Moin,

so das mit dem Auflisten von Dateien usw. funktioniert so halb. Wie folgt sieht mein Code aus. Das ist nicht der komplette CODE aber das Wichtigste denke ich

Code:
    (*____________________________________________________________________________*)
    0:
        IF StartTrig.Q = TRUE THEN
            Error            := FALSE;
            Busy            := TRUE;
            ExecuteTrig(CLK := FALSE);
            TonMaxRuntimetoErr(IN := FALSE, PT := T#20S);
            ReadBackup        := 2;
        END_IF;    
    (*____________________________________________________________________________*)
    2:    (* Warten bis Ordner gelistet wird - Durch Öffnen ausprobieren *)
        
        TonMaxRuntimetoErr(IN := TRUE, PT := T#20S);    (* nach 20s fehler ausgeben *)
        
        ExecuteTrig(CLK := TRUE);
        VarExecute := FALSE;
        IF ExecuteTrig.Q = TRUE THEN
            VarExecute := TRUE;
        END_IF;
        
        DirOpen(
                        xExecute    := VarExecute,
                        sDirName    := '/media/pi/DATAMONSTER',  
                        hDir        => hDir);    
                        
                        
        IF DirOpen.xError = FALSE THEN
            IF DirOpen.xBusy = FALSE THEN
                IF DirOpen.xDone = TRUE THEN
                    DirOpen(
                                xExecute    := FALSE,
                                sDirName    := '/media/pi/DATAMONSTER',  
                                hDir        => );    
                                
                    ExecuteTrig(CLK := FALSE);
                    Index            := 0;
                    ReadBackup        := 5;        (* Test inhalt auslesen *)    
                END_IF;
            END_IF;
        ELSE
            DirOpen(
                        xExecute    := FALSE,
                        sDirName    := '/media/pi/DATAMONSTER',  
                        hDir        => );    
                        
            ExecuteTrig(CLK := FALSE);
            (* So lange durchlaufen bis es gefunden wurde *)
            IF TonMaxRuntimetoErr.Q = TRUE THEN
                ReadBackup        := 1000;
            END_IF;        
        END_IF;    


    (*____________________________________________________________________________*)
    5:    (* Inhalt vom Ordner auflisten (max. 10 Dateien) *)


        ExecuteTrig(CLK := TRUE);
        VarExecute := FALSE;
        IF ExecuteTrig.Q = TRUE THEN
            VarExecute := TRUE;
        END_IF;
    
        DirList(
                    xExecute    := VarExecute, 
                    hDir        := hDir, 
                    deDirEntry    => deDirEntry);
                    
            

        IF     DirList.xError = FALSE THEN
            IF DirList.xBusy = FALSE THEN
                IF DirList.xDone = TRUE THEN
                    ListOfFile[Index]         := DirList.deDirEntry;            (* ganze Struktur übergeben *)
                    ListOfFileName[Index]    := DirList.deDirEntry.sEntry;    (* nur Bezeichnung vom Element übergeben *)
                    
                    DirList(
                                xExecute    := FALSE, 
                                hDir        := hDir, 
                                deDirEntry    => );    
                        
                    ExecuteTrig(CLK := FALSE);
                    IF Index < 9 THEN
                        Index := Index +1;            (* Index raufzählen *)
                    ELSE
                        ReadBackup    := 8;        (* Dir Schließen *)
                    END_IF;    
                END_IF;
            END_IF;
        ELSE
            ExecuteTrig(CLK := FALSE);
            IF DirList.eError = File.ERROR.NO_MORE_ENTRIES THEN        (* Fehler der Kein Fehler ist abfangen *)
                ReadBackup    := 8;        (* Dir Schließen *)            (* alle Daten ausgelesen also weiter im text *)
            ELSE
                ReadBackup    := 1000;        (* Fehler *)    
            END_IF;        
            DirList(
                    xExecute    := FALSE, 
                    hDir        := hDir, 
                    deDirEntry    => );    
        END_IF;
        
    (*____________________________________________________________________________*)
    8:    (* Ordner schließen *)


        ExecuteTrig(CLK := TRUE);
        VarExecute := FALSE;
        IF ExecuteTrig.Q = TRUE THEN
            VarExecute := TRUE;
        END_IF;
        DirClose(
                    xExecute    := VarExecute,  
                    hDir        := hDir);    

        IF     DirClose.xError = FALSE THEN
            IF DirClose.xBusy = FALSE THEN
                IF DirClose.xDone = TRUE THEN
                    DirClose(
                            xExecute    := FALSE,  
                            hDir        := hDir);    
                    ExecuteTrig(CLK := FALSE);
                    ReadBackup    := 10;        (* Hier geht irgendwas weiter *)                
                END_IF;
            END_IF;
        ELSE
            DirClose(
                    xExecute    := FALSE,  
                    hDir        := hDir);                    
            ExecuteTrig(CLK := FALSE);
            ReadBackup    := 1000;        (* Fehler *)            
        END_IF;

Leider werden mehr Einträge aufgelistet als vorhanden.... Woran kann das Liegen und kann man das irgendwie abfangen?

hier noch ein Bild links auf dem Bild sieht man, dass was DirList ausgibt und rechts sieht man was wirklich im Ordner enthalten ist =)
Bild_DirList.jpg
Hardware Raspi Pi 3 - aktuellstes Raspbian und CODESYS.

Vielen Dank euch für jeden Tipp =)

MfG Hendrik
 
Zurück
Oben