Autor Thema: Verzeichnis, Unterverzeichnis und Dateien  (Gelesen 7768 mal)

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Verzeichnis, Unterverzeichnis und Dateien
« am: 14.12.08 - 18:57:06 »
Moin,moin,

ich will mir eine Datenbank machen, in der ich meine Amiga Spiele und Programme verwalte und sichere.

Jetzt bin ich gerade dabei mit einen Agenten zu schreiben, der mir aus einem "Stamm"-Verzeichnis alle Diskettenimages an ein Notesdokument hängt.

Der Ordner ist so aufgebaut, dass er pro Spiel einen Ordner enthält, der wiederum die einzelnen Image-Dateien enthält. Es gibt jedoch einzelne Ordner, die wiederum Unterordner mit den Image-Dateien enthalten, weil es zu der "Spielserie" mehrere Teile gibt.

Zum Beispiel:
Spiele\Ambermoon\Disk1.adf <= betrifft die meisten Spiele
Spiele\Indiana Jones\the last crusade\Disk1.adf <= Spiel mit mehreren Teilen
Spiele\Indiana Jones\the Fate of Atlantis\Disk1.adf <= Spiel mit mehreren Teilen

Ich habe bisher noch nie mit solchen Verzeichnis-Abfragen unter Notes gearbeitet. Mein erstes Problem ist, dass ich nur an den Dateinamen des ersten Spiels komme. Mein Codeauschnitt:

Zitat
Dim pathName As String, GameName As String, FileName as string
   
pathName$ = "C:\Spiele\"   
GameName$ = Dir$(pathName$, 16)
   
Do While GameName$ <> ""
   If Left(Gamename$,1) <> "." Then
         
      FileName$ = Dir$(pathname$ & Gamename$ & "\",0)
         
      Do While FileName$ <> ""
         Print GameName$ & " - " & FileName$
         FileName$ = Dir$()
      Loop
         
   End If      
      
   GameName$ = Dir$()
Loop

Sobald die 2. Do While Schleife einmal durchgelaufen ist, kommt bei GameName$ = Dir$() ein Ungültiger Funktionsaufruf. Was mich auch irritiert bei GameName$ = Dir$(pathName$, 16) kommt beim 1. Lauf "." und beim 2. Lauf ".." raus, erst beim 3. Durchlauf kommt das erste richtige Verzeichnis??? Was hat es mit diesen beiden Punkt-Verzeichnissen auf sich?

Gruß
Demian
Gruß
Demian

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Verzeichnis, Unterverzeichnis und Dateien
« Antwort #1 am: 14.12.08 - 20:55:34 »
Naja "." ist das Verzeichnis selbst. Und ".." ist das Verzeichnis zu dem das aktuelle Verzeichnis Unterverzeichnis ist.

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Verzeichnis, Unterverzeichnis und Dateien
« Antwort #2 am: 14.12.08 - 21:31:16 »
Ok, hab das mit den Dateien jetzt über ne 2. Schleife gelöst. Wenn auch unschön. Jetzt bleibt nur noch das Problem mit den Unterverzeichnissen.

Zitat
   Dim pathName As String, GameName As String, FileName As String, Gamepath As String
   Dim GameVerzArr() As String
   Dim i As Integer
   
   
   pathName = "C:\Dokumente und Einstellungen\Demian\Eigene Dateien\Amiga\Original\Disketten\Spiele\"   
   GameName = Dir$(pathName, 16)
   
   'Spielverzeichnisse in Array speichern
   Do While GameName <> ""
      If Left(GameName,1) <> "." Then
         Redim Preserve GameVerzArr(i)   
         GameVerzArr(i) = GameName
         
         Print GameVerzArr(i)         
         i = i + 1      
      End If
      
      GameName$ = Dir$()
   Loop
   
   'Alle Verzeichnisse in Array durchlaufen und Dateien filtern
   For i = 0 To Ubound(GameVerzArr)
      GamePath =  "C:\Dokumente und Einstellungen\Demian\Eigene Dateien\Amiga\Original\Disketten\Spiele\" & GameVerzArr(i) & "\"
      Filename = Dir$(GamePath,0)
      
      Do While Filename <> ""
         Print Filename   
         Filename = Dir$()
      Loop      
   Next i

Gruß
Demian
Gruß
Demian

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Verzeichnis, Unterverzeichnis und Dateien
« Antwort #3 am: 14.12.08 - 23:52:52 »
Also, ich habe das jetzt um folgende Funktion erweitert:

Zitat
Function SubDirectory(Gamepath As String) As Boolean
   Dim SubDirectoryName As String
   SubDirectoryName = Dir$(GamePath, 16)
   
   Do While SubDirectoryName <> ""      
      Msgbox SubDirectoryName            
      
      SubDirectoryName = Dir$()
   Loop
End Function

Leider enthält die Variable SubDirectoryName die einzelnen Dateinamen, wenn in dem Ordner Gamepath keine Unterordner sind ??? Wenn Unterordner vorhanden sind, gibt er die auch aus. Ist nicht durch die 16 im ersten Dir$ gegeben, dass er bei SubDirectoryName = Dir$() auch nur Verzeichnisse auswirft und nicht die einzelnen Dateien?

Gruß
Demian
Gruß
Demian

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Verzeichnis, Unterverzeichnis und Dateien
« Antwort #4 am: 28.12.08 - 13:54:44 »
So, hab jetzt nach einer kurzen Pause folgenden Agenten erstellt (es lebe Windows-Scripting):


Zitat
Declarations
Dim DiskName As String
Dim DiskChapter As String

Zitat
Sub Initialize
   Dim fs As Variant
   Dim MainFolder As Variant
   
   Set fs = CreateObject("Scripting.FileSystemObject")
   Set MainFolder = fs.GetFolder("C:\Test\")
   
   Call ListDirs(MainFolder)
End Sub

Zitat
Sub ListDirs(Directory As Variant)
   Dim Disks As Integer, Number As Integer
   Goto DiskCounter   
   
Main:      
   Forall File In Directory.Files
      Number = Number + 1
      If Instr(1,file.path,".adf",1) > 0 Then Call CreateDisk(file.path,Disks,Number)
   End Forall
   
   Forall SubDir In Directory.SubFolders
      Print SubDir.path    
      ListDirs SubDir
   End Forall
   Exit Sub
   
DiskCounter:
   Forall File In Directory.Files
      If Instr(1,file.path,".adf",1) > 0 Then Disks = Disks + 1   
   End Forall
   
   Goto Main
End Sub

Zitat
Function DiskNameAndChapter(FilePath As String)  As String
   Dim MainSeparator As Integer, NameSeparator As Integer,ChapterSeparator As Integer
   
   MainSeparator = Instr(4,FilePath,"\") '<- main path ("C:\Spiele\")
   NameSeparator = Instr(MainSeparator + 1,FilePath,"\") '<- DiskName
   ChapterSeparator = Instr(NameSeparator + 1,FilePath,"\") '<- DiskChapter
   
   DiskName = Mid(FilePath,MainSeparator + 1 ,NameSeparator - MainSeparator - 1)
   
   If ChapterSeparator > 0 Then
      DiskChapter = Mid(FilePath,NameSeparator + 1 ,ChapterSeparator - NameSeparator - 1)
   End If
   
End Function

Zitat
Sub CreateDisk(FilePath As String,Disks As Integer,Number As Integer)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim DiskImage As NotesRichTextItem
   
   Set db = s.CurrentDatabase
   Set doc = db.CreateDocument
   doc.Form = "Disk"
   
   doc.DiskCategory = "0"
   
   Call DiskNameAndChapter(FilePath)
   doc.DiskName = DiskName
   If DiskChapter <> "" Then doc.DiskChapter = DiskChapter
   
   doc.DiskTotalCount = Disks
   doc.DiskNumber = Number
   doc.DiskImageCreated = "1"
   
   Set DiskImage = doc.CreateRichTextItem("DiskImage")
   Call DiskImage.EmbedObject(1454,"",FilePath)
   
   doc.DiskCondition = "1"
   
   Call doc.Save(True,False)
End Sub


Für meine Zwecke ausreichend. Soviel Aufwand für einmale Benutzung. Aber Hauptsache er tuts. Immer noch besser, als hunderte Doks per Hand zu erstellen  ;D

Gruß
Demian
Gruß
Demian

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz