Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: TomLudwig am 16.02.04 - 12:37:17

Titel: Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 16.02.04 - 12:37:17
Hallo,
ich möchte überprüfen ob ein Ordner auf der Festplatte vorhanden ist oder nicht. Das ich ihn ggf. erstellen kann.

Dies geht mit $Dir(Path, Value)

Wenn der Path nur ein Verzeichnis tief ist z.B. "C:\Test" ist es kein Problem,
aber bei z.B. "C:\Test\Test2" bekomme ich die Fehlermeldung "Path not found".

Was mache ich falsch?
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: eknori am 16.02.04 - 13:00:07
verschachtelte Verzeichnispfade kannst du mir der API von Windows anlegen

Declare Function MakePath Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (Byval lpPath As String) As Long
(in die declaration kopieren )

Sub Click(Source As Button)
   Msgbox MakePath("d:\Test\test1\")
End Sub

Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 16.02.04 - 13:01:57
Ja gut, ich möchte aber erst überprüfen ob es das Verzeichnis nicht schon gibt. Und da bekomm ich bei $Dir die Fehlermeldung...
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: eknori am 16.02.04 - 13:06:32
Auch kein Akt:

Function checkDir( path As String ) As Integer
   
   On Error Resume Next
   
   CheckDir = False
   
   Chdrive Left( path, 1 )
   Chdir path
   
   If Curdir = path Then          
      CheckDir = True
   End If
   
End Function

Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 16.02.04 - 13:31:47
Ich bekomm wieder die Fehlermeldung "Path not found" wenn ich mehr ein oder mehr unterverzeichnisse angebe...
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: eknori am 16.02.04 - 13:39:25
komisch, bei mir geht es problemlos

(http://www.atnotes.de/attachments/chkdir.jpg)
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 16.02.04 - 14:13:26
ohh.... sorry ich hab den error-handler nicht mit übernommen.

Gut, aber ich hab jetzt das nächste Problem bei
MkDir "C:\Test\Test2"

bekomm ich wieder "Path not Found"

WARUM?
Er solls doch erstellen!
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: Axel am 16.02.04 - 14:16:06
Hi,

es ist der gleiche Grund wie oben. Notes kann immer nur ein Verzeichnis erstellen.

Du musst erst das Stammverzeichnis erstellen und dann das Unterverzeichnis.


Axel
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 16.02.04 - 14:19:01
na danke, dann darf ich den kompletten string von vorn bis hinten durchgehen   und zerlegen anhand der "\"

ODER???
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: eknori am 16.02.04 - 14:22:06
eigentlich hatte ich dir die Funktion zum erstellen des verzeichnisbaums doch schon gepostet. Mit dem Check testest du, ob das Verzeichnis da ist; wenn nicht mit MakePath anlegen.

...
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 16.02.04 - 15:55:24
MakePath legt nur einen Ordner ohne Unterordner an....
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 16.02.04 - 15:56:40
Sorry, wenn das abschließende Zeichen ein "\" ist. Werden alle (Unter-)Ordner erstellt....
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: Axel am 16.02.04 - 19:18:10
Hi,

ich hab vor einiger Zeit mal was aus dem Web gefischt.

Das Ganze besteht aus zwei Funktionen:

Zitat

Function IsValidDir(sPath As String) As Integer
   
   On Error Resume Next
   
   attr% = Getfileattr(sPath)
   If Err > 0 Then
      IsValidDir = 1
      Exit Function
   End If
   
   If (attr% And ATTR_DIRECTORY) Then IsValidDir = 0
   
End Function


Function MakeDir (sPath As String) As Integer
   
   Dim sNewPath As String
   Dim iPosi As Integer
   
   If Right$(sPath,1) <> "\" Then sPath = sPath & "\"
   MakeDir = 1
   
   On Error Goto MakeDirError
   
   Do
      iPosi = Instr(iPosi + 1, sPath, "\")
      If iPosi > 0 Then
         sNewPath = Left$(sPath, iPosi - 1)
         If IsValidDir(sNewPath) = 1 Then
            Mkdir sNewPath
         End If  'IsValidDir(sNewPath) = 0...
      End If  'iPosi > 0...
   Loop Until iPosi = 0
   
   MakeDir = 0
   Exit Function
   
MakeDirError:
   Messagebox "Error " & Str(Err) & " : " & Error$
   Resume Next
   
End Function



Beispiel:

Sub Click(Source As Button)
   
   If MakeDir("E:\Test\Test1") = 1 Then
      Messagebox "Fehler beim Anlegen des Verzeichnisses."
   Else
      Messagebox "Verzeichnis wurde erfolgreich angelegt."
   End If
   
End Sub

Das Ergebnis sieht dann so aus:

E:\
   |_ Test
          |__Test1

Du darfst der Funktion nur einen Pfad übergeben. Der darf keinen Dateinamen enthalten.

Ich hoffe das hilft dir weiter.


Axel
 
Titel: Re:Überprüfen ob Ordner vorhanden
Beitrag von: TomLudwig am 17.02.04 - 08:01:50
Ich habs einfach mit der Funktion von eknori gelöst und festgelegt, dass Benutzer ein abschliesendes "\" Zeichen eingeben müssen.

Und siehe da... es funktioniert....

Danke....