Dateien mit Endung *.log aus einem Verzeichniss kopieren

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von roddy.

    Dateien mit Endung *.log aus einem Verzeichniss kopieren

    Tach nochmal,

    habe schon wieder ne Frage - oder besser gesagt 3 :)

    Ich möchte aus einem Ordner alle Dateien die mit .log enden kopieren - also hab ich folgende Fragen:

    1. Wie lese ich den Windows Program Files Ordner aus? (habe teilweise englische und deutsche Windows Versionen zu bedienen)

    2. Wie kopiere ich alle log-Files in aus diesem Ordner in einen anderen?

    3. Da teilweise diese Dateien in einem Unterordner liegen der den Rechnernamen trägt: wie lese ich in VB den Rchnernamen aus?

    4. wie packe ich alle Dateien (sind alles txt Dateien mit log / ini oder dat Endungen in einen File? Packen über VB?



    Vieleicht kann mir auch hierbei jemand helfen? Bin wirklich n absoluter noob was VB angeht und hab da nich wirklich kenne von...



    Danke schonmal ;)
    Hallo,

    wir hatten neulich in einem anderen thread ein ähnliches problem :>

    Bestimmte dateien aus einem ordner lesen, und diese in eine combobox wiedergeben.
    du kannst natührlich diese "funktion" ein wenig umbauen und auf deine bedürfnisse anpassen
    (dateityp ect pp ) ist eigentlich alles selbsterklärend.
    hier der code :

    Visual Basic-Quellcode

    1. Dim value As String = My.Application.Info.DirectoryPath
    2. Dim directory As New System.IO.DirectoryInfo(My.Application.Info.DirectoryPath & "\files")
    3. For Each file1 As System.IO.FileInfo In directory.GetFiles
    4. If file1.Extension = ".php" Then
    5. ComboBox1.Items.Add(file1.Name)
    6. End If


    dies könntes du halt versuchen umzuformen, ich wüste auf anhieb jetzt nicht wie,
    aber mal schauen, der ansatz hast du schonmal ^^

    mfg
    lexeaus

    edit :

    sorry, das ist ein VB 2008 code
    Hallo,

    wenn ich bestimmte Ordner durchsuchen will, benutze ich das FileSystemObject-Objekt. Ich habe allerdings nur VBA. Wie ich jedoch mal hier im Forum gelesen habe, ist VBA nur eine abgespeckte Version von VB6. Probiers einfach mal aus:

    Visual Basic-Quellcode

    1. Sub VerzeichnisDurchsuchen(Quellverzeichnis As String, UnterordnerDurchsuchen As Boolean)
    2. Set FSO = CreateObject("Scripting.FileSystemObject")
    3. Set Quelle = FSO.GetFolder(Quellverzeichnis)
    4. OrdnerDurchsuchen Quelle, UnterordnerDurchsuchen
    5. End Sub
    6. Sub OrdnerDurchsuchen(Verzeichnis, UnterordnerDurchsuchen As Boolean)
    7. Rechnername = Verzeichnis.Name 'Falls die Datei direkt im Ordner liegt, der den Rechnernamen trägt.
    8. 'Falls das nicht so ist, folgende zwei Zeilen:
    9. x = Split(Verzeichnis.Path, "\") 'Die Split-Funktion erzeugt ein Datenfeld, mit dem durch "\" getrennten Text.
    10. Rechnername = x(i) 'Mit Angabe des Indexes i lässt sich dann der Name eines bestimmten übergeordneten Ordners auslesen.
    11. Set Dateien = Verzeichnis.Files
    12. For Each Datei In Dateien
    13. If Right(Datei.Name, 4) = ".log" Then
    14. Datei.Copy Zieldateipfad
    15. End If
    16. Next
    17. If UnterordnerDurchsuchen Then
    18. Set Unterordner = Verzeichnis.SubFolders
    19. For Each Ordner In Unterordner
    20. OrdnerDurchsuchen Ordner, True
    21. Next
    22. End If
    23. End Sub

    Das ist ein Code, wie ich ihn verwende, etwas angepasst an deine Problemstellung.

    EDIT:
    Was meinst du mit "Packen": in eine zip-Datei oder einfach den Inhalt der Dateien aneinanderhängen?
    Für ersteres weiß ich auch nicht, wie das geht, für letzteres vielleicht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „roddy“ ()

    Moin,

    irgendwie blick ichs nich...

    ich habs jetzt so probiert:

    Visual Basic-Quellcode

    1. Private Sub log_Click(Index As Integer)
    2. Call verzeichnisdurchsuchen
    3. End Sub
    4. Public Function verzeichnisdurchsuchen()
    5. Dim Quellverzeichnis As String, UnterordnerDurchsuchen As Boolean
    6. Set FSO = CreateObject("Scripting.FileSystemObject")
    7. Set Quelle = FSO.GetFolder(Quellverzeichnis)
    8. ordnerdurchsuchen Quelle, UnterordnerDurchsuchen
    9. End Function
    10. Public Function ordnerdurchsuchen()
    11. Dim Verzeichnis, UnterordnerDurchsuchen As Boolean
    12. Rechnername = Verzeichnis.Name 'Falls die Datei direkt im Ordner liegt, der den Rechnernamen trägt.
    13. 'Falls das nicht so ist, folgende zwei Zeilen:
    14. x = Split(Verzeichnis.Path, "\") 'Die Split-Funktion erzeugt ein Datenfeld, mit dem durch "\" getrennten Text.
    15. Rechnername = x(i) 'Mit Angabe des Indexes i lässt sich dann der Name eines bestimmten übergeordneten Ordners auslesen.
    16. Set Dateien = Verzeichnis.Files
    17. For Each Datei In Dateien
    18. If Right(Datei.Name, 4) = ".log" Then
    19. Datei.Copy Zieldateipfad
    20. End If
    21. Next
    22. If UnterordnerDurchsuchen Then
    23. Set Unterordner = Verzeichnis.SubFolders
    24. For Each Ordner In Unterordner
    25. ordnerdurchsuchen Ordner, True
    26. Next
    27. End If
    28. End Function




    Was mach ich falsch? Ich bin wie gesagt n absoluter noob in dem VB Thema...



    Pkt. 4: Also ich denk da an packen - aber das müsst ich dann über die shell machen, oder?!
    Es sind eigentlich schon Prozeduren (Sub) mit Parametern, keine Funktionen. Wenn ich bespielsweise den Ordner "C:\Ordner1" durchsuchen will und möchte, dass alle Unterordner auch durchsucht werden, dann rufe ich die Prozedur wiefolgt auf (in VBA):

    Visual Basic-Quellcode

    1. VerzeichnisDurchsuchen "C:\Ordner1", True

    Was ich mit den gefundenen Dateien machen will (in diesem Fall kopieren, wenn es eine log-Datei ist), ist in meinem Beispielcode in den Zeilen 14-16, wobei ich "Zieldateipfad" als Platzhaltervariable eingesetzt habe. An dieser Stelle sollte der Zieldateipfad (inkl. Dateiname) stehen.
    Da teilweise diese Dateien in einem Unterordner liegen der den Rechnernamen trägt: wie lese ich in VB den Rchnernamen aus?
    Betrachten wir in meinem Beispielcode die Zeilen 7-10:

    Nehmen wir einmal an, es wird gerade der Ordner "C:\Ordner1\Ordner2" durchsucht (ein Unterordner von "C:\Ordner1").

    Visual Basic-Quellcode

    1. Verzeichnis.Name
    gibt dann "Ordner2" zurück.

    Wenn man

    Visual Basic-Quellcode

    1. x = Split(Verzeichnis.Path, "\")
    ausführt, dann hat das Datenfeld x folgende Werte:
    x(0)="C:", x(1)="Ordner1", x(2)="Ordner2"
    Wie weit der Indexbereich von x geht (in diesem Fall 2), kann man mit UBound(x) ermitteln.

    Wie ich in den Kommentaren geschrieben habe, kann man entweder die eine oder die andere Variante nutzen, je nach dem, ob sich die log-Datei immer direkt im Ordner mit dem Rechnernamen befindet, oder nicht.