Verzeichniseinträge auslesen (SysDirRead)

2007-03-14
2007-03-14
  • E.Schulz@KHS - 2007-03-14

    Tach zusammen!

    Kurze und vielleicht auch blöde Frage:

    SysDirRead gibt 1/0 zurück wenn weitere Verzeichniseinträge vorhanden/nicht vorhanden sind.

    Wenn ich gerade eben den letzten Eintrag gelesen habe, liefert die Funtion ne 1 oder ne Null?

    Für mich steht also die Frage nach ner while- oder nach ner repeat-Schleife im Raum

     
  • Erik Böhm - 2007-03-14

    Hi

    Eine 1 wenn noch weitere Einträge vorhanden sind.

    Sieht z.B. so aus:

    ( -------------------------------------------------------------------- )

    i: INT := 0;
    
    dwDirHandle: DWORD;
    
    strTemp: STRING;
    
    strExt: STRING;
    
    strDirEntry:    ARRAY[1..100] OF STRING;
    

    ( -------------------------------------------------------------------- )

    dwDirHandle := SysDirOpen(strPath);

    FOR i:=1 TO 100 BY 1 DO

    strDirEntry[i]  := '';
    

    END_FOR

    i := 0;

    WHILE SysDirRead(hDir:=dwDirHandle,strTemp,0) <> 0 DO

    strExt  := RIGHT(strTemp,4);
    
    IF strExt = '.txt' THEN  (* File Extension Filterung *)
    
        i   := i+1;
    
        strDirEntry[i]  := strTemp;
    
    END_IF
    

    END_WHILE

    Gruss

    Erik

     
  • E.Schulz@KHS - 2007-03-14

    Ich nochmal!

    Anscheinend liefert die Funktion ne Null, wenn sie den letzten Eintrag gelesen hat und kein weiterer Eintrag im Verzeichnis ist.

    Also läßt sich diese Funktionalität nur mit ner Repeat-Schleife ausführen.

    Was gibt denn die Funktion zurück und was übergibt sie mir als Eintrag, wenn ich sie beim ersten Leseversuch keinen Eintrag findet?

    Ich kanns schlecht testen, darum frag ich so unbeholfen

     
  • Erik Böhm - 2007-03-14

    Hallo

    Also die Funktion liefert eine 1 wenn ein Eintrag vorhanden war.

    Ich hab das trotzdem (oder grade drum) mit einer WHILE Schleife gemacht...

    Wenn beim 1. Versuch kein Eintrag gefunden wird gibts eben gleich eine NULL.

    Hast du keine RTE auf deinem PC installiert ?

    Ist bei der Standard Installation von CoDeSys dabei.

    Da kannst du sowas ganz einfach testen.

    Gruss Erik

     
  • E.Schulz@KHS - 2007-03-14

    Hallo Erik,

    bis jetzt hatte ich nen Motion Controller dran hängen, den ich heute grad nicht da hab, deshalb meine Hilflosigkeit! Ich werds mal mit RTE versuchen.

    Ich hab gestern die Routine im Debug-Modus getestet, da hätte ich schwören können, dass mir der folgende Loop

    while SysDirRead(dwHandle, strDirEntry, pDirInfo)<>0 do

    (mache irgendwas mit dieser Datei)

    end_while

    immer die letzte Datei unterschlagen hat.

    Isses vielleicht nicht so glücklich, den Funktionsaufruf direkt in die while-Bedingung einzuarbeiten?

     
  • Erik Böhm - 2007-03-14

    Hallo

    Funktionsaufruf direkt in der While Bedingung sollte kein Problem sein.

    Ich mach das ja genau so, allerdings auf der RTE.

    Und ich weiss 100%ig das da alle Einträge eingelesen werden.

    Wäre natürlich denkbar, das in der SysLib deines Herstellers ein Fehlerchen drin wäre.

    Aber probiers lieber vorher noch mal, bevor du dich beschwerst

    Gruss

    Erik

     

Log in to post a comment.