AnGelBot-Portal²

Normale Version: Verzeichnis erkennen ohne fso?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tach!

Ich würd gerne wissen, ob jemand eine Möglichkeit kennt, zu erkennen ob ein Pfad in einem Verzeichnis oder einer Datei endet.

Da verzeichnisse ja punkte enthalten können und Dateien auch ohne Endung auskommen, ist es nicht immer offentsichtlich, ob der angegebene Pfad (als String) ein Verzeichnis oder eine Datei ist.

unter VB6 hätte ich einfach wie folgt gehandelt:

Code:
If CBool(GetAttr("FileArea\Scripts") And vbDirectory) Then
    'verzeichnis

Else
    'kein verzeichnis

End if

GetAttr scheint der aber nicht zu kennen (ebenso wenig die Funktion "Dir")

Wenn es geht möchte ich gerne auf die FileSystemObject verzichten.

vielleicht weiß ja jemand einen nützlichen Tipp

mfg Balmung
also in der b10 musst du schon mit dem File System arbeiten, aber in der b11 gibts ne schöne Funktion: DirExists

Ein Beispiel:

Code:
If DirExists(FileAreaHome&"Scripts") Then
'Verzeichnis
Else
'Exestiert nicht, oder ist kein Verzeichnis
End If
AnGeL Party Line Version 1.6.2 Beta 11

Ich habs genau so ausprobiert, und auch versucht verschiedene Parameter einzugeben.
Hab auch mal mit DirExist probiert.

aber dummerweise meldet der Bot mir folgenden Fehler:

Code:
[Sat 23:43:29] <Ichigo> *** Scripting error in 'test.asc':
[Sat 23:43:29] <Ichigo>     Error   : 13 (Typen unverträglich: 'DirExists')
[Sat 23:43:29] <Ichigo>     Position: Line 38, Column 2
[Sat 23:43:29] <Ichigo>     Excerpt : out = "ja"
[Sat 23:43:29] <Ichigo>     Command : Chan_Msg (#Neko-Mimi-Dan | ChaozZBubi |  | !test)
[Sat 23:43:29] <Ichigo> *** End of error message

Code:
if DirExists(FileAreaHome & "Scripts") Then
    out = "ja"
Else
    out = "nein"
End If

EDIT:
Ich habe jetzt jedenfalls FSO benutzt.
Wäre schön wenn es zukünftig gute alternativen geben würde, die nicht auf FSO zurückgreifen Smile

mfg Balmung
probiers mal mit DirExist
Wunderschönen Guten Morgen,

Nettes Thema, hab ich grad auch für was anderes gebraucht. Da mich fso auch nicht wirklich zufrieden gestimmt hat und ich ohne ActiveX auskommen Wollte hab ich mir einfach mal folgendes überlegt:

Code:
    if InstrRev(<Pfadstring>, ".") < InstrRev(<Pfadstring>, "/") Then
        'ein Verzeichnis
        vFolder = "True"
    Else
        'eine Datei
        vFolder = "False"
    End If

Das Prinzip ist Recht einfach. Es wird einfach geprüft ob nach dem letzten "/" noch ein Punkt kommt, der ja nunmal eine Datei identifiziert wegen der DateiEndung (und nein, ich kenn grad kein Beispiel für ne ordentliche Datei die ohne Endung aus kommt, denn nur was Windows nicht anzeigt, ist trotzdem vorhanden). Kommt ein Punkt isses ne Datei, kommt kein Punkt ist es ein Verzeichnis. Nun muss man nur noch Prüfen obs vorhanden ist, stellt ja keine großen Probleme mehr dar.

Edit: alternativ kann man ja auch noch prüfen ob der letzte "/" auch das letzte Zeichen ist

Code:
    if Len(<Pfadstring>) = InstrRev(<Pfadstring>, "/") Then
        'ein Verzeichnis
        vFolder = "True"
    Else
        'eine Datei
        vFolder = "False"
    End If

Sollte so schon ausreichen Smile
Das setzt dann natürlich vorraus, dass die anzusprechende Datei eine endung hat, und ein Verzeichnis keinen Punkt.

Eine imho recht unglückliche Lösung, die aber funktionieren kann, wenn man sich eben an diese Kriterien hält.

Letzteres Beispiel würd ich aber einfach mit Right() machen:

Code:
If Right(Pfad, 1) = "\" Then
...

mfg Balmung Smile
Balmung schrieb:Das setzt dann natürlich vorraus, dass die anzusprechende Datei eine endung hat, und ein Verzeichnis keinen Punkt.

Eine imho recht unglückliche Lösung, die aber funktionieren kann, wenn man sich eben an diese Kriterien hält.

mfg Balmung Smile

falsch, denn wenn wenn das Verzeichnis einen Punkt hätte kommt definitiv danach wieder ein / oder \ und somit wäre wieder das letzte zeichen ein / oder \ und somit eindeutig ein Verzeichnis. von daher ist die Lösung nicht so unglücklich wie du sie darstellst und funktioniert auch.
Zudem Frag ich mich wieso man Verzeichnisse mit Punken und Datein ohne Dateiendung haben muss. Der Sinn bleibt mir verborgen, ändert auch nix daran das die Lösung funktioniert. Ich kann aber durchaus nachvollziehen das du deine Lösung und deine DLL irgendwie an den Mann bringen willst und das durch das hervorheben deiner Lösung tust Wink
Referenz-URLs