Freitag, 4. April 2008

Arbeiten mit Verzeichnissen und Dateinamen (Teil 2) / Working with directories and filenames (Part 2)

Nachdem ich im ersten Teil auf die Befehle GETDIR() und ADDBS() näher eingegangen bin, ist dieses Mal die Auswahl von Dateien angesagt.
Ergänzend möchte ich auf einen älteren Eintrag hinweisen, der die Arbeit mit Namensausdrücken zum Thema hat.
Der Befehl zur Dateiselektion ist sicherlich jedem VFPler hinlänglich bekannt:
cFile = GETFILE()

GETFILE() kann jedoch mit diversen Parametern versorgt werden, die u.a. auch eine genauere Bestimmung der aufgelisteten Dateien beinhaltet.
GETFILE([cFileExtensions] [, cText] [, cOpenButtonCaption] [, nButtonType] [, cTitleBarCaption])

Parameter 1 (der komplexeste der 5) befasst sich mit den auswählbaren Dateitypen. Hierbei ist unbedingt auf die richtige Syntax innerhalb der Stringdefinition zu achten.
Grundsätzlich gilt:
  • Die einzelnen Parameter werden durch Kommata von einander getrennt
  • Parameter 1 wird als String übergeben und steht somit in Anführungszeichen/Hochkommata/eckigen Klammern
  • Innerhalb von Parameter 1 erfolgt die Trennung der einzelnen Auswahlblöcke mit einem Semikolon.
  • Innerhalb der einzelnen Blöcke erfolgt die Trennung von beschreibendem Text und Suffix über einen Doppelpunkt.
  • Innerhalb der Suffixauflistung erfolgt die Trennung der einzelnen Suffixe mit einem Komma.
cFile = GETFILE([Fotos jpg,gif,png,bmp):jpg,gif,png,bmp;] ;
     + [Dokumente(doc,txt,xls,pdf):doc,txt,xls,pdf], ;
       [Dateiname], ;
       [Auswählen], ;
       0, ;
       [Bitte wählen Sie ein Dokument aus])

In obigen Beispiel stellen wir standardmäßig die Fotoauswahl für die Dateitypen JPG, GIF, PNG und BMP bereit. Innerhalb der Combobox 'Dateityp' wird dieser Punkt als Voreinstellung eingeblendet. Innerhalb der Auswahl taucht jedoch auch die Möglichkeit auf, gezielt nach Dokumenten ausschau zu halten (DOC, TXT, XLS, PDF)

Wichtig bei der Funktion GETFILE() ist, dass wir zuvor in das Startverzeichnis unserer Wahl gewechselt haben sollten.
Ein Wechsel erfolgt üblicherweise mit dem Befehl
CD | CHDIR

Damit wir anschliessend wieder in unser ursprüngliches Verzeichnis zurückspringen können sollte der aktuelle Pfad zwischengespeichert werden.
cCurDir = CURDIR()
CHDIR (cDir)
cFile = GETFILE()
....
CHDIR (SYS(5) + cCurDir)
RELEASE cCurDir

An dieser Stelle sei angemerkt, dass es durchaus sinnvoll ist, sofort nach dem Programmstart das Arbeitsverzeichnis der APP/EXE in einer zentral verfügbaren Eigenschaft oder Variablen zu speichern. Dies kann bspw. über eine Anbindung an das _screen-Objekt erfolgen:
_screen.ADDOBJECT([oVerz],[custom])
_screen.oVerz.AddProperty([Startpfad],ADDBS(SYS(5) + SYS(2003)))

Vorteil dieser Vorgehensweise ist, dass wir ein jederzeit verfügbares und erweiterbares Verzeichnisobjekt haben, in dem wir alle möglichen Ordner gezielt hinterlegen und jederzeit abfragen können. Hierdurch verändert sich natürlich auch der zuvor gezeigte Code.
CHDIR (cDir)
cFile = GETFILE()
....
CHDIR (_screen.oVerz.Startpfad)

Keine Kommentare:

Kommentar veröffentlichen