Autor Beitrag
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.01.03 21:10 
Wie kann ich feststellen ob ein Pfad korrekt geschrieben wurde. Ein Bespiel:

c:\programme\abc

Ist ein korrekter Pfad.

test\abc

ist natürlich kein korrekter Pfad. Hier fehlt z.B. das Laufwerk.

Das Problem ist, daß ich nicht DirectoryExists nutzen kann, da diese Pfade möglicherweise nicht existieren. Allerdings will ich prüfen ob der Nutzer, bei Eingabe eines nicht existierenden Pfades, sich vertan hat.

Hintergrund ist der, daß ein Tool einige Verzeichnisse überwachen soll. Das beduetet aber nicht, daß diese Verzeichnisse existieren müssen. Der Nutzer will einfach nur informiert werden wenn ein Verzeichnis mit dem Namen erstellt wird.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.01.03 21:45 

  1. Prüfen ob ein oder mehere ungültige Zeichen drin sind (steht im PSDK)
  2. Ein Doppelpunkt darf nur einmal an 2. Stelle vorkommen
  3. Kucken ob, nach jedem Backslash noch ein Backslash kommt, aber es kann sein, dass Windows dopplete Backslashes ignoriert
  4. ...

Erweitere die Argumente für einen gültigen Pfad und mach was draus.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.01.03 17:59 
Da bis jetzt nichts gekommen ist was wie eine fertige Delphi-Funktion aussieht, hab ich angefangen es selbst zu machen. Hier das vorläufige Ergebnis. Vielleicht sieht einer Fehler drinn an die ich nicht gedacht habe. Es ist auf jeden fall wichtig, daß es zu keiner Fehlermeldung kommt wenn der Pfad korrekt geschrieben wurde (nicht ob er da ist, nur ob er richtig geschrieben wurde). Vor allem bei Netztwerkpfaden bin ich mir nicht sicher. Kann sich das einer anguken? Ich suche also noch Schwachstellen an die ich nicht gedacht habe.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
function IsValidPath(s: String): Boolean;
var
  i: Integer;
  t: String;
begin
  Result := False;

  if Length(s) < 1 then Exit;
  if s[Length(s)] <> '\' then s := s + '\';
  if not (((s[1] in ['a'..'z', 'A'..'Z']) and (Copy(s, 2, 2) = ':\')) or
    (Copy(s, 1, 2) = '\\')) then Exit;
  if Copy(s, 1, 2) = '\\' then Delete(s, 1, 2) else Delete(s, 1, 3);

  while Length(s) > 0 do begin
    t := Copy(s, 1, Pos('\', s) - 1);
    if t = '' then Exit;
    for i := 1 to Length(t) do if Pos(t[i], '\/:*?"<>|') > 0 then Exit;
    Delete(s, 1, Pos('\', s));
  end;

  Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s := 'F:\Delphi\Komponenten zum testen\Semipanel\doc';
  if IsValidPath(s) then ShowMessage( 'Alles Ok' ) else ShowMessage( 'Fehler' );;
end;
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 27.01.03 10:26 
Hi Popov,

die folgenden Pathangaben wären doch eigentlich auch ok, oder?
ausblenden Quelltext
1:
..\Test					

und
ausblenden Quelltext
1:
.\Test					


Gruß
TINO
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 27.01.03 20:43 
Jajn. Eigentlich geht es nur um absolute Pfade.

Es geht dadrum, das ich ein kleines Programm geschrieben habe mit dem der User unteranderem einige Pfade auf Aktivität überwachen kann. Eigentlich ist es so, daß man den Pfad (bzw. Ordner) per Dialogfenster auswählen kann. Das sind dann die Ordner die da sind. Es gibt aber auch Ordner die noch nicht erstellt sind, aber irgendwann von einem Programm erstellt werden können (z.B.: c:\programme\webdialer). Ich hoffe, daß keiner diesen Pfad unfreiwillig hat. Zu diesem Zweck soll es auch möglich sein Pfade anzugeben die noch nicht da sind. Damit jetzt keiner eine unsinnige Zeichenfolge als Pfad eingeben kann, hab ich diese Routine um zu überprüfen ob der Pfad korrekt geschrieben ist.

Eigentlich könnte ich mir das sparen und sagen, daß jeder für seine falsch geschriebenen Pfade selbst verantwortlich ist. Aber in mancher Hinsicht bin ich doch ein Perfektionist und lasse den User ungern einen Fehler machen.
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mo 27.01.03 21:36 
also kann man aber keine Netzwerkpfade überwachen oder ??

also sowas wie \\matze\c\windows\.......

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 27.01.03 22:04 
Meine Prozedur kontroliert einige Punkte. Als "Präfix" vor den Pfaden werden Angaben in der Art von "a:\" bis "z:\" und "\\" erlaubt. Also müßte es theoretisch möglich sein, daß auch ein Netzwerkpfad erkannt wird. Es ist also ein:

c:\hallo\test

und ein

\\hallo\test

möglich.

Zumindest theoretisch. Ob sie praktisch Fehler enthällt und einige falsche Pfade durchläßt oder richtige Pfade als falsch angibt, daß konnte ich noch nicht testen. Ich hoffe auch, daß sich einige die Prozedur auf Schwachstellen angucken.
Ist die Frage beantwortet? Das Problem gelöst?

Dann klicke hier, um das Thema entsprechend zu markieren!