Autor Beitrag
zero-2-one
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 08.04.07 02:47 
Hallo mal wieder,

ich habe mir zwar schon ein passende Funktion gebastelt aber ich frag zu so früher Stunde trotzdem nochmal nach um es vieleicht eleganter lösen zu können...

Es geht darum, dass ich manuell einen DateiPfad in ein Edit eingeben können will und dann, bevor ich den Pfad erzeuge, möchte ich gerne wissen, ob der Pfad überhaupt erstellt werden kann.

Zuerst habe ich mir eine Funktion "mkpath" mit ähnlicher Wirkungsweise wie "ForceDirectory" gebaut. Der Pfad wird also erstellt und die Funktion gibt bei Erfolg den Wert true und bei Misserfolg den Wert false zurück . "MkPath" löscht allerdings zusätzlich bei einem Fehler die bisher erstellten Ordner wieder bis zur ursprünglichen Verzeichnisstruktur (ich hasse Relikte) - hab das über ne Rekursion gelöst.

um jetzt zu prüfen, ob mein Pfad überhaupt erstellt werden kann habe ich mir eine weitere Funktion "IsPathOk" gebastelt und lasse in dieser mit Hilfe von "mkpath" den Pfad erstellen und lösche dann alles wieder auf den Ursprung zurück. Danach gebe ich dann eigentlich nur den Wert von "MkPath" zurück. Finde das halt etwas unschön und suche noch nach ner sauberen Lösung.

Wenn jemand was weiß sag ich schonma danke :)

Alex
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 08.04.07 07:29 
Ich würde testen, ob nicht erlaubte Zeichen (/ : * ? " < > |) drin vorkommen oder ob der Gesamtpfad zu lang ist (länger als MAX_PATH darf er glaube ich nicht sein, das sind glaube ich 260 Zeichen oder so --> ich weiß nicht, ob das bei allem Dateisystemen gleich ist, bei FAT und NTFS glaube ich aber schon).
Dann reichts eigentlich aus, wenn man nachsieht, ob das Laufwerk existiert und beschrieben werden kann.

Dann sollten die meisten Fehlerfälle ausgeschlossen sein, und ich den wenigen Ausnahmefällen müsste halt ein Fehler angezeigt werden, wenn tatsächlich der Ordner erstellt werden soll (nach deiner Methode). Die oben angegeben Zeichen würde ich jedenfalls genau wie der Windows Explorer (da kommt ne Meldung, wenn du z.B. versuchst als Ordnername so ein Zeichen einzugeben) gleich bei der Eingabe ausfiltern. Außerdem die maximale Eingabelänge auf MAX_PATH setzen, dann ist schon viel gewonnen.

Eine direkte Möglichkeit festzustellen, ob eine ganze Ordnerstruktur mit mehreren Unterordnern erstellt werden kann ohne es zu tun gibt es AFAIK nicht.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 08.04.07 08:05 
Hinzufügen sollte man noch die Prüfung:

1. ist das Medium beschreibbar oder readonly,
2. ist noch Speicherplatz vorhanden - denn auch Verzeichnisnamen verbrauchen Speicherplatz - wenn 0 Bytes "frei" sind, geht's nicht.

Wenn die Tests alle positiv sind, kann man auf das reale Erstellen der Verzeichnisse verzichten.

Mehr über DELTREE:
www.microsoft.com/ge...eschen.mspx?mfr=true
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 08.04.07 11:25 
Ferner kann man über die ACLs bei NTFS versuchen auszulesen, ob man in dem Verzeichnis, wo rumgedoktort werden soll überhaupt die Berechtigungen zum Erstellen von Verzeichnissen existiert.

Bei UNC-Pfaden muss zusätzlich z.B. auch die Verfügbarkeit und das Login geprüft werden.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.