Wenn wir mit Hilfe von GETFILE() eine Datei selektiert und die Auswahl überprüft haben,
cFile = GETFILE()
IF FILE(cFile)
...
ENDIF
kommt es immer wieder vor, dass wir nur einen Teil des in 'cFile' stehenden Wertes verarbeiten möchten.
Gehen wir einmal davon aus, dass in cFile der folgende Wert enthalten ist:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
so stellt uns Visual Foxpro nun u.a. sieben Funktionen bereit, diesen String zu zerlegen.
Die Funktion JUSTDRIVE() liefert uns als Ergebnis den Laufwerksbuchstaben:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTDRIVE(cFile)
Die Funktion JUSTPATH() liefert uns als Ergebnis den Laufwerksbuchstaben inklusive des kompletten Pfades, jedoch ohne Backslash am Ende:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTPATH(cFile)
Die Funktion JUSTSTEM() liefert uns als Ergebnis den Dateinamen ohne Suffix:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTSTEM(cFile)
Die Funktion JUSTFNAME() liefert uns als Ergebnis den Dateinamen mitsamt dem Suffix:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTFNAME(cFile)
Die Funktion JUSTEXT() liefert uns als Ergebnis nur das Suffix:
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?JUSTEXT(cFile)
Mit Hilfe dieser Funktionen können wir den Datei- bzw. Verzeichnisnamen in 5 Segemente zerlegen und ggf. durch neue Teile ersetzen. Wollen wir nun bspw. eine Backup-Datei von Demodatei.doc im selben Verzeichnis anlegen, dann greift die Funktion FORCEEXT(). Mit ihrer Hilfe wird aus Demodatei.doc der String Demodatei.bak Hierbei steht es uns frei, den kompletten Verzeichnisnamen oder nur den reinen Dateinamen mitzugeben.
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?FORCEEXT(cFile,[bak])
?FORCEEXT(JUSTSTEM(cFile),[bak])
?FORCEEXT(JUSTFNAME(cFile),[bak])
Soll die Backup-Datei in einem Unter- oder Parallelordner abgelegt werden, so könnte die Funktion FORCEPATH() zum Zuge kommen.
Für den Unterordner 'Backups':
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Backups\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?FORCEPATH(cFile,ADDBS(JUSTPATH(cFile)) + [Backups])
Im Parallelordner 'Backups':
C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Backups\Demodatei.doc
cFile = [C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\Demodatei.doc]
?FORCEPATH(cFile,ADDBS(JUSTPATH(JUSTPATH(cFile))) + [Backups])
Im Verbund mit der Funktion FORCEEXT() ergeben sich daraus nun bspw. die folgenden Funktionen:
LOCAL lcBackupExt as String, lcBackupPath as String, ;
cFile as String, cFNew as String, cSubDir as String, cParall as String
lcBackupExt = [bak]
lcBackupPath = [Backups]
cFile = GETFILE()
cFNew = FORCEEXT(JUSTSTEM(cFile),lcBackupExt)
cSubdir = GetSubdirectory(JUSTPATH(cFile),lcBackupPath,.T.)
cParall = GetParallelDirectory(JUSTPATH(cFile),lcBackupPath,.T.)
CLEAR
=CreateBackupFile(cFile,cSubDir + cFNew)
=CreateBackupFile(cFile,cParall + cFNew)
FUNCTION CreateBackupFile
LPARAMETERS vSourceFile as String, vTargetFile as String
LOCAL llReturn as Boolean
?[kopiere ] + vSourceFile
?[nach ] + vTargetFile
TRY
COPY FILE (m.vSourceFile) TO (m.vTargetFile)
?[Kopiervorgang erfolgreich durchgeführt]
llReturn = .T.
CATCH
?[Kopiervorgang ist fehlgeschlagen]
ENDTRY
RETURN llReturn
ENDFUNC
FUNCTION GetSubdirectory
LPARAMETERS vPath as String, vSubDir as String, vCreate as Boolean
LOCAL lcPath as String
m.vPath = ADDBS(m.vPath)
lcPath = FORCEPATH(m.vPath,m.vPath + m.vSubDir)
IF m.vCreate = .T. AND !DIRECTORY(lcPath)
MKDIR (lcPath)
ENDIF
RETURN lcPath
ENDFUNC
FUNCTION GetParallelDirectory
LPARAMETERS vPath as String, vSubDir as String, vCreate as Boolean
LOCAL lcPath as String
lcPath = ADDBS(ADDBS(JUSTPATH(JUSTPATH(ADDBS(m.vPath)))) + m.vSubDir)
IF m.vCreate = .T. AND !DIRECTORY(lcPath)
MKDIR (lcPath)
ENDIF
RETURN lcPath
ENDFUNC
Keine Kommentare:
Kommentar veröffentlichen