[Gelöst] Nach Dateien suchen

9. Oktober 2007 07:09

Hallo zusammen,

ich möchte in Unterverzeichnissen nach Dateien vom Typ z.B. "123456*.pdf" suchen und diese auch öffnen.

Das Öffnen bekommt man sehr einfach über die "Microsoft Shell Controls And Automation" hin.

Code:
CREATE(Shell);
Shell.Open(FileName);

Mit Shell ist 'Microsoft Shell Controls And Automation'.Shell


Bei dem Durchsuchen des Verzeichnisses mit den Unterverzeichnissen habe ich jetzt so meine Probleme.

Schon jetzt Danke, Gruß Gregor
Zuletzt geändert von se3p am 12. Oktober 2007 09:29, insgesamt 1-mal geändert.

Re: Nach Dateien suchen

9. Oktober 2007 09:59

Moin Gregor!

se3p hat geschrieben:[...] Bei dem Durchsuchen des Verzeichnisses mit den Unterverzeichnissen habe ich jetzt so meine Probleme.

Und welche genau sind deine Probleme?

Viele Grüße, Marc

9. Oktober 2007 11:28

Hallo Marc,

ich hatte mal in VBA (in einem Excel-Macro) die Methode "FindeZeichnug" eingebaut (siehe unten). Diese Methode durchsucht mit Hilfe des FileSystemObject den Unterordner der 1.Ebene nach den Dateien.

Code:
'Diese Methode sucht nach einem PDF-File in den Unterordnern.
'Aber nur in den 1.Unterordnern!!!
Public Sub FindeZeichnug(Pfad As String, dateiName As String)
    Dim FSO As FileSystemObject
    Dim Folder1 As Folder
    Dim SubFolder As Folder
    Dim OpenFileVar As String
    Dim CFile As String
    Dim sPath As String


    Set FSO = New FileSystemObject

    ' Ggf. abschliessenden Backslash anfügen
    If Right$(Pfad, 1) <> "\" Then Pfad = Pfad & "\"
     
    Set Folder1 = FSO.GetFolder(Pfad)
   
      ' Unterordner lesen
    If Folder1.SubFolders.Count > 0 Then
        For Each SubFolder In Folder1.SubFolders
           
            'Hier werden alle Unterordner (1.Stufe) durchlaufen!
            OpenFileVar = ""
        MsgBox (Folder1.SubFolders.Item + " were")
       
            CFile = Dir(SubFolder.Path & "\" & dateiName & "*.pdf")
            Do While CFile <> ""
           
                OpenFileVar = SubFolder.Path & "\" & CFile
               
                DoOpenFile = ShellExecuteAny(hwnd, vbNullString, OpenFileVar, vbNullString, vbNullString, 1)
                CFile = Dir
           
            Loop

        Next
    End If
   
End Sub



Jetzt könnte ich ja dieses auch in Navision nachbilden. Ein Problem bei der Programmierung habe ich mit dem Objket "SubFolders". In diesem sind alle Unterordner enthalten und ich brauche eigentlich nur eine Schleife, die alle Items durchläuft. In VBA ging dies mit "For Each SubFolder In Folder1.SubFolders".

Wie läßt sich diese aber in Navision umsetzen?

Irgendwie stehe ich hier auf dem Schlauch.

Soweit mein aktuelles Problem.

Grundsätzlich wäre ich sowohl über Infos zu diesem Teilproblem des Schleifendurchlaufs als auch vielleicht zu Komplettlösungen zu der Aufgabenstellung "alle Unterordner nach Dateien durchsuchen" interessiert. Irgendwie ist das ja eine Standardaufgabe die bestimmt schon sehr oft programmiert wurde.

Gruß Gregor

9. Oktober 2007 11:57

Hier würde ich mit der virtuellen Tabelle File arbeiten. In etwa so:

Code:
FindeZeichnung(Pfad : Text[250];dateiName : Text[250])
// Diese Methode sucht nach einem PDF-File in den Unterordnern.
// Aber nur in den 1.Unterordnern!!!

// Ggf. abschliessenden Backslash anfügen
IF COPYSTR(Pfad,STRLEN(Pfad)) <> '\' THEN
  Pfad:=Pfad+'\';

// Unterordner lesen
File.SETRANGE(Path, Pfad);
File.SETRANGE("Is a file", FALSE);
File.SETFILTER(Name, '<>%1&<>%2', '.', '..');
IF File.FIND('-') THEN
  REPEAT

    // Hier werden alle Unterordner (1.Stufe) durchlaufen!
    File2.RESET;
    File2.SETRANGE(Path, File.Path+File.Name);
    File2.SETRANGE("Is a file", TRUE);
    File2.SETFILTER(Name, dateiName+'.pdf');
    IF File2.FIND('-') THEN
      HYPERLINK(File2.Name);
  UNTIL File.NEXT=0;

Der o. g. Code ist nicht getestet. File und File2 sind lokale Variablen vom Type Record und Subtype File.

Aufruf der Funktion in etwa so:

Code:
FindeZeichnung('C:\Test', '123');

Gruß, Marc

9. Oktober 2007 16:59

Hallo Marc,

also das funktioniert super. :-) Vielen Dank für die sehr elegante Lösung über die virtuelle Tabelle File. Die Lösung gefällt mir so gut, weil sie mit den Navision-Mitteln sauber funktioniert und nicht mit irgendwelche Hilfskonstruktionen arbeitet.

Ich stelle morgen den Quellcode noch mal ein, wo die Lösung auch rekursiv programmiert wurde, um nicht nur die ersten Unterordner zu durchsuchen.

Schöne Grüße

Gregor