Prüfen, ob Datei existiert.

SY50

Level-1
Beiträge
271
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich würde gerne mit Codesys V3 und der SysFile Lib ein Baustein schreiben, welcher mir Prüft, ob eine Datei existiert.

Dies würde ich egrne so machen, dass ich den Speicherort, den Dateinamen und die dateiendung an eine methode übergebe.
Wenn ich nun nach irgendeiner datei mit der endung .txt suchen möchte, würde ich den Dateinamen einfach auf "*" schreiben.

1. geht das?

2. Es könnten ja auch mehrere Dateien mit "*.txt" gefunden werden, wie bekomme ich die dann alle raus? mehrfach abfragen, oder kann ich irgendwie ein array abrufen?
 
Moin, also allgemein testen ob eine Datei besteht kannste mit der Open funktion aus der Sysfile ... allerdings brauchste da den vollständigen Dateipfad incl. Dateiname.

wenn mich aber nicht alles täuscht gibt es in der Sysdir Bibliothek eine Funktion Read mit der du Verzeichnis Einträge lesen kannst.
so lässt sich ja relativ schnell feststellen ob eine datei vom typ .txt vorhanden ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Komme da nicht zurecht

Und wie funktioniert das? also mit der doku komme ich nicht zurecht. Da kann ma doch auch garnicht sagen, dass es ein .txt oder .xy sein soll, oder?
 
du machst einfach einmalig ein sysdiropen damit du dein handle und deinen ersten verzeichnis eintrag bekommst.
dann machste so oft sysdirread, bis du am Ende des verzeichnisses angelangt bist und speicherst die dabei gesammelten datei namen in ein array.

zum schluss einfach bei den dateinamen hinter dem punkt schauen ob da txt steht und dann hast es... grad getestet, klappt auch ;)
 
Also hatte jetzt erst mal sysfileopen und close versucht. Also er öffnet die datei, dann merke ich mir, dass es sie gibt und schließe sie wieder. wollte jetzt zum testen mal versuchen, dass ich sie einfach im windows umbenenne. dann sagt mir wirndows, dass die datei noch von codesys verwendet wird. daraufhin habe ich sie nochmal geschlossen, und bei versuch sie zu öffnen, ging die steuerung in stop mit schwerem ausnahmefehler, was ist das denn?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hier ein kleiner Anstoß ...

Code:
PROGRAM PLC_PRG
VAR
	sFirstEntry : STRING;
	DirInfo : SysDir.DirInfo;
	rtsResult : SysFile.SysTypes.RTS_IEC_RESULT;
	rtsResult1 : SysFile.SysTypes.RTS_IEC_RESULT;
	rtsHandle : SysFile.SysTypes.RTS_IEC_HANDLE;
	
	xReadfirst : BOOL;
	xContinue : BOOL;
END_VAR

IF xReadfirst THEN
	rtsHandle := SysDir.SysDirOpen('/lib/',sFirstEntry,SIZEOF(sFirstEntry),ADR(DirInfo),ADR(rtsResult));
	xReadfirst := FALSE;
END_IF

IF xContinue THEN
	rtsResult1 := SysDir.SysDirRead(rtsHandle,sFirstEntry,SIZEOF(sFirstEntry),ADR(DirInfo));
	xContinue := FALSE;
END_IF
 
/lib/ muss halt dein verzeichnis sein, mit jedem xContinue := TRUE wird der nächste verzeichnis eintrag gelesen und in sFirstEntry gespeichert

Die sysfile brauchste ja bei deinem Vorhaben garnicht ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss es mal versuchen

Also ich wollte inmal nur nach Dateiendungen suchen und das ander mal nach kompletten dateinamen.

Wundere mich nur, das codesys die datei anscheinend nicht schließt. Das andere muss ich dann morgen ode rübermorgen noch mal versuchen. (Muss jetzt zum Kunden)
 
mit dem oberen ansatz kannste nach Dateiendungen suchen, mit SysfileOpen nach bekannten Dateinamen.
SysfileClose klappt auch problemlos.
 
Zurück
Oben