- Offizieller Beitrag
Hallo!
Ich habe mich mal rangesetzt und eine verbesserte Version von FileChangeDir geschrieben.
Diese Funktion erlaubt es, auch den Volumenamen eines Laufwerks anzugeben. Was besonders bei einer CD/DVD von Vorteil sein kann. So kann man testen, ob die CD mit diesem Namen in irgendeinem Laufwerk liegt.
Schaut euch die Funktion mal an und schreibt, was ihr davon haltet.
Edit: Ich habe die Funktion noch etwas erweitert. Man kann jetzt den Laufwerkstyp vorgeben (optional), um die Suche zu beschleunigen.
Spoiler anzeigen
;===============================================================================
;
; Funktion zum ändern des Arbeitsverzeichnisses
;
; Aufrufbeispiel: $msg = _FileChangeDir ( "Pfad" [, Laufwerkstyp] )
;
; Optional: Angabe des Laufwerkstyps ("ALL" (=Standard), "CDROM", "REMOVABLE", "FIXED",
; "NETWORK", "RAMDISK" oder "UNKNOWN") für die Suche nach dem Datenträgernamen
;
; Rückgabewert:
; Erfolg = Gibt 1 zurück, @error = 0
;
; Fehler = Gibt 0 zurück, wenn die Änderung nicht erfolgreich war, und setzt @error (siehe Bemerkungen).
;
; Bemerkungen:
; Wenn die Funktion scheitert (gibt 0 zurück), enthält @error zusätzliche Information:
; 1 = Fehler im Dateipfad
; 2 = kein Datenträger mit diesem Namen gefunden
; 3 = Laufwerkstyp falsch/fehlerhaft
; 4 = kein Datenträgername vorhanden
;
; Zusätzliche Hinweise:
; 'Pfad' darf hier auch mit dem Namen des Datenträgers beginnen.
; Beispiel: $msg = _FileChangeDir ( "System:\windows\system32\" )
; Wenn C: den Datenträgernamen "System" hat, dann wird eine "1" zurückgeliefert
;
; Funktioniert auch mit dem Datenträgernamen einer CD/DVD.
;
; Beim Datenträgernamen wird zwischen Groß-/Kleinschreibung unterschieden!
;
;===============================================================================
Func _FileChangeDir($lFilePath, $lDrive = "ALL")
Local $er = FileChangeDir($lFilePath)
If $er = 0 Then; Pfad konnte nicht vom Standard FileChangeDir geändert werden
Local $i, $lVolLetter
Local $lPos = StringInStr($lFilePath, ":")
If $lPos > 1 Then
Local $lVolName = StringLeft($lFilePath, $lPos)
Local $fPath = StringMid($lFilePath, $lPos+1)
Local $var = DriveGetDrive($lDrive)
If NOT @error Then
For $i = 1 to $var[0]
If (DriveGetLabel($var[$i]) & ":") == $lVolName Then
$lVolLetter = $var[$i]
Exitloop
EndIf
Next
If $lVolLetter <> "" Then
$er = FileChangeDir($lVolLetter & $fPath)
If $er = 1 Then
SetError(0)
Return("1"); Arbeitsverzeichnis erfolgreich geändert
Else
SetError(1)
Return("0"); Fehler im Dateipfad
EndIf
Else
SetError(2)
Return("0"); kein Datenträger mit diesem Namen gefunden
EndIf
Else
SetError(3)
Return("0"); Laufwerkstyp falsch/fehlerhaft
EndIf
Else
SetError(4)
Return("0"); kein Datenträgername vorhanden
EndIf
Else
SetError(0)
Return("1"); Arbeitsverzeichnis erfolgreich geändert (Standard FileChangeDir)
EndIf
EndFunc
MfG. Oscar