-
OpenDir, ReadDir, CloseDir
Moin Moin,
ich möchte in ILE RPG ein IFS Verzeichnis auslesen. Dafür habe ich vor die OpenDir, ReadDir und CloseDir API's zu verwenden. Leider scheitet es schon beim mir beim OpenDir.
Egal ob ich /BIN, /bin, /BIN/ oder /bin/ öffnen möchte, bekomme ich immer den Fehlercode 3025 "No such path or directory" zurück.
"DSPLNK OBJ('/bin')" gibt mir ein Ergebnis zurück, der Pfad ist aus meiner Sicht OK.
Hat jemand einen Tipp für mich, was ich falsch mache?
Gruß und Danke Frank
Code:
D DIR S * INZ(*NULL)
D DIR_FILE S *
D READDIR PR * EXTPROC('readdir')
D DIRP * VALUE
D OPENDIR PR * EXTPROC('opendir')
D DIRNAME * CONST OPTIONS(*STRING)
D CLOSEDIR PR 10I 0 EXTPROC('closedir')
D DIRHANDLE * VALUE
C EVAL ERRYN = 'N'
C EVAL PATH = '/BIN/'
C EVAL DIR = OPENDIR(%TRIM(PATH))
C IF DIR <> *NULL
C ELSE
C EVAL P_ERRNO = SYS_ERRNO()
C EVAL msgtxt = %char(errno)
C ENDIF
-
Vermutlich ist der Prototyp falsch definiert. Nimm mal VALUE anstelle von CONST.
http://www.scottklement.com/rpg/ifs_ebook/opendir.html
-
Pikachu war schneller...
Liegt an der Definition
PHP-Code:
D opendir PR * EXTPROC('opendir')
D dirname * VALUE options(*string)
Gruß
Ronald
-
Treffer! DANKE!
Das VALUE zusammen mit dem x'00' funktioniert. Verstehe die Zusammenhänge zwar nicht, komme so aber erstmal weiter.
Code:
D OPENDIR PR * EXTPROC('opendir')
D DIRNAME * VALUE OPTIONS(*STRING)
C EVAL PATH = %trim('/bin') + x'00'
Nochmal Danke für die schnelle Hilfe!
-
Also bei mir geht das auch ohne den x'00'
Gruß
Ronald
-
Gerade noch mal getestet. Mit x'00' klappts super, ohne bekomme ich den Fehler 3486 "A path name is too long"..... aber keine Zeit mehr daran verschwenden bitte.
-
Ich nehme an dass PATH ein Feld mit fixer Länge definiert ist
Birgitta
-
Wenn du mit C-Routinen und Parametern vom Typ *String umgehst, so solltest du alle Felder als Varying definieren oder per %trim(MyField) an die Routine übergeben.
Durch Options(*string) wird das x'00' sowieso automatisch drangehängt.
Dies wird dir auch bei weiteren C-Routinen begegnen.
-
Also bei CHAR*-Parametern unterscheidet sich Value und Const nicht wirklich.
Es wird immer ein Pointer übergeben.
Allerdings kannst du durch Const/Value dann auch Konstanten als Parameter übergeben.
%trim() auf eine Konstante macht übrigens keinen Sinn.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks