Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kopieren von Bildern

Begonnen von Gockel67, Oktober 18, 2024, 16:17:46

⏪ vorheriges - nächstes ⏩

Gockel67

Moin Köbi,
zu Punkt 3. Einfach alle Bilder.zip laden und so zusammenschneiden wie du es brauchst. Holger hat für mich mehrere Erweiterungen gemacht. Deshalb kann auch die Zeile mit der ProgressBar raus. Die ist noch von mir.

@holger: Wahnsinn was du dir für andere für eine Arbeit machst. Ich hatte doch nur nachgefragt ob es das OCX auch in schön gibt  :D

Gockel67

#16
Moin Köbi,
zu Punkt 3. Einfach alle Bilder.zip laden und so zusammenschneiden wie du es brauchst. Holger hat für mich mehrere Erweiterungen gemacht. Deshalb kann auch die Zeile mit der ProgressBar raus. Die ist noch von mir.

@holger: Wahnsinn was du dir für andere für eine Arbeit machst. Ich hatte doch nur nachgefragt ob es das OCX auch in schön gibt  :D

P.S. Sorry für den Doppelpost. Mein Rechner hat gesponnen.

Gockel67

Moin Holger,
jetzt sitz ich hier vor dem Rechner und komme aus dem Staunen nicht mehr raus. Genau so hatte ich das zuerst gelöst als ich nur einen Ordner kopieren konnte. Nach deiner Änderung um mehrere Ordner zu kopieren funktionierte das nicht mehr und ich hatte es weggelassen.

Deine Lösung mit den Rechtecken kommt mir sehr entgegen da die ProgressBar auf einem anderen Rechner nicht funktioniert hat (ist halt ein Spezialfall mit einer Portable Virtualbox und Windows10 wo nur Die Access-Runtime drauf läuft).

Ich weiß gar nicht was ich sagen soll. Danke reicht für die Arbeit die du dir für andere machst definitiv nicht aus.

Jetzt funktioniert meine Datensicherung universell für alle meine Datenbanken. Ich beschäftige mich mit Access halt immer nur so weit wie ich es für meine eigentlichen Hobbys benötige. Ohne deine Hilfe hätte ich das niemals so hinbekommen.

Ganz dicken Dank an dich.

Debus

Hallo Köbi

1. Die Zeile hatte ich übersehen, die kam von Gockel -  sorry ist natürlich raus
2. die 100% werden bei mir angezeigt siehe Bild
3. Das Logfile habe ich nun auch wieder mit drin und am Ende noch als Statistik erweitert. Der Dateiname beinhalten nun auch noch den Windows User sowie Datum und Uhrzeit.

Gruß
Holger




Köbi

Hallo Holger
Vielen Dank für die neueste Version der DB. Ich kann mich dem Lob von Gockel nur anschliessen. Auch ich werde dich in meinem Nachtgebet einschliessen. Zusätzlich schenke ich dir noch 4 Punkte in Flensburg. 8)

Noch ein paar Bemerkungen und Anliegen:

Progressbar: Ich habe 1380 Dateien kopiert, bin damit nur auf 99% gekommen. Nachdem ich noch etwa 2000 mp3-Dateien zum kopieren hinzugefügt habe, kommt auch mein PC auf 100%.

Logfile: Wenn ein Verzeichnis mit Unterverzeichnissen kopiert wird, werden pro Verzeichnis/Unterverzeichnis die Anzahl der kopierten Dateien und die Statistik angezeigt. Eine Statistik über alle kopierten Dateien fehlt. Ist aber nicht schlimm, man kann sie ja mit dem Rechner zusammenzählen. Wäre aber ein nice-to-have.

ALLE Dateien kopieren. Ich möchte alle Dateitypen kopieren, weiss aber nicht wie das geht. So jedenfalls nicht
'  #### Alle Dateien kopieren:
 '        If LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*.*" Then

Mach dir jetzt aber keinen Kopf. Ich erwarte nicht, dass dich bemühst, meine Anliegen zu lösen. Eigentlich bin ich ja schon so zufrieden.

Debus

Habe es dann nochmal umgebaut. So ist es nun auch noch flexibel. Erweitern ist so ganz einfach.
Im Logfile das Addieren kann man auch noch machen.

Habe das ganze dann nochmal angehangen

Köbi

Hallo Holger
Vielen Dank für deine Arbeit. Ich habe noch folgende Änderungen und Ergänzungen vorgenommen:
Private Function ShouldCopyFile(fileSystem As Object, fileObj As Object)
   
   Select Case Me.cboDateiTyp.Value
       Case "Bilder"
           ShouldCopyFile = LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*bmp" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*jpg" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*jpeg" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*png" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*gif" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*Tiff" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*raw"
                                   
       Case "Alle Dateien"
           ShouldCopyFile = True
           
       Case "Office Dateien"    'Word, Excel und Powerpoint
           ShouldCopyFile = LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*do*" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*xl*" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*ppt*" Or "*po*"     'Powerpoint
                           
       Case "Musik Dateien"
           ShouldCopyFile = LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*mp3" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*wav" Or _
                            LCase(fileSystem.GetExtensionName(fileObj.Name)) Like "*wma"

       Case Else
           ShouldCopyFile = False
   End Select
End Function

Die Bilderauswahl habe ich noch um die Dateiendungen Tiff und raw erweitert. Das ist eher nebensächlich.

Wichtiger sind die Änderungen bei den Office Dateien. Hier habe ich die Dateiendungen gekürzt und mit * ergänzt. Damit werden alle Word-Dateien, alle Excel-Dateien und alle Powerpoint-Dateien beim Kopiervorgang mitgenommen. Also sowohl doc, docx, dot, dotx, dotm, oder xls und xlsx mit Konsorten.

Die Musik Dateien habe ich nur eingefügt, weil ich sie gerade brauche.

Gockel67

Gibt es eigentlich die Möglichkeit Ordner vom kopieren auszuschliessen?

Debus

#23
Meinst Du bestimmte Ordner also immer die selben oder was genau?

Holger

Knobbi38

Und wie erkennst du die Ordner, welche nicht kopiert werden sollen?

Debus

Hallo Ulli,

daher ja meine Frage ob er bestimmte Ordner meint oder was genau dabei gemeint ist. Wenn er einige statische Ordner ausschließen will, wird es gehen. Aber ansonsten fragen wir mal Aladin :=)))

Holger

Knobbi38

@Debus

Das würde schon it etwas Aufwand gehen, indem man z.B. eine Listbox mit Multiselect verwendet und alle nicht zu kopierenden Ordner auswählt. Ohne Interaktion aber ist alles nur statisch.
Warum sollten nochmal überhaupt Dateien/Ordner kopiert werden?

Gruß Ulrich



Debus

Hallo Ulli,

ZitatWarum sollten nochmal überhaupt Dateien/Ordner kopiert werden?

Wenn ich mich richtig erinnere sollten einfach nur Bilder von A nach B kopiert werden und wenn schon vorhanden übergangen werden. Hätte man sicherlich auch mit Windows Boardmittel oder TotalCommander oder FreeCommander etc einfach hinbekommen können.

Und ja mit einer Auswahlmöglichkeit wie ListBox würde man es hinbekommen. Nur ist ja eigentlich alles schon vorhanden.

Holger

Gockel67

Es geht nur um einen bestimmten Ordner. Immer der selbe. Aber wenn es zuviel Aufwand ist verschieb ich den ganz einfach woanders hin

Debus

#29
Hey, pass die Datei von mir mal einfach wie folgt an:

Option Compare Database
Option Explicit



Sub CopyFiles(fileSystem As Object, sourceFolder As String, targetFolder As String, logFile As Integer)
    Dim folderObj As Object
    Dim fileObj As Object
    Dim subfolderObj As Object
    Dim newTargetFolder As String
    Dim totalFiles As Long
    Dim copiedFiles As Long
    Dim skippedFiles As Long

    Set folderObj = fileSystem.GetFolder(sourceFolder)

   
    If ShouldSkipFolder(sourceFolder) Then
        Print #logFile, "Übersprungen: " & sourceFolder & " (übersprungener Ordner)"
        Exit Sub
    End If

    totalFiles = CountFiles(folderObj)

    If Not fileSystem.FolderExists(targetFolder) Then
        fileSystem.CreateFolder targetFolder
    End If

    For Each fileObj In folderObj.Files
        On Error Resume Next

        If ShouldCopyFile(fileSystem, fileObj) Then
            newTargetFolder = targetFolder & Mid(fileObj.Path, Len(sourceFolder) + 1)

            If Not fileSystem.FolderExists(fileSystem.GetParentFolderName(newTargetFolder)) Then _
                fileSystem.CreateFolder fileSystem.GetParentFolderName(newTargetFolder)

            If Not fileSystem.FileExists(newTargetFolder) Then
                fileSystem.CopyFile fileObj.Path, newTargetFolder

               
                Print #logFile, "Kopiert: " & fileObj.Path & " nach " & newTargetFolder

                copiedFiles = copiedFiles + 1
            Else
                Print #logFile, "Übersprungen: " & newTargetFolder & " (bereits vorhanden)"
                skippedFiles = skippedFiles + 1
            End If

            UpdateProgressBar copiedFiles, totalFiles
        End If

        On Error GoTo 0

        DoEvents
    Next fileObj

    For Each subfolderObj In folderObj.SubFolders
        Call CopyFiles(fileSystem, subfolderObj.Path, targetFolder & Mid(subfolderObj.Path, Len(sourceFolder) + 1), logFile)
    Next subfolderObj

   
    Print #logFile, vbCrLf & "Zielverzeichnis: " & targetFolder
    Print #logFile, "Gesamtzahl der kopierten Dateien im Zielverzeichnis: " & copiedFiles
    Print #logFile, "Gesamtzahl der übersprungenen Dateien im Zielverzeichnis: " & skippedFiles

End Sub

Function ShouldSkipFolder(folderPath As String) As Boolean
    Dim skipFolders As Variant
    skipFolders = Array("C:\Pfad\Zu\Überspringen", "C:\Ein\Anderer\Ordner") ' Fügen hier die zu überspringenden Ordner hinzu
   
    Dim folder As Variant
    For Each folder In skipFolders
        If LCase(folderPath) = LCase(folder) Then
            ShouldSkipFolder = True
            Exit Function
        End If
    Next folder
   
    ShouldSkipFolder = False ' nicht überspringen
End Function



Der Code ist allerdings ungetestet!

Du kannst natürlich das Array direkt im Code befüllen oder wie Ulli geschrieben hat es über eine Listbox mit Multiselect befüllen, aber das ist ein anderes Thema

Gruß
Holger