# Problem mit Datei kopieren



## ::emanuel:: (7. April 2004)

Ich möchte gern bestimmte Daten kopieren. Folgende Situation:


```
Zielordner = "H:\Fotos\Eigene Fotos\Fotoalbum\" & Jahr & "\" & Monat & "\" & Monat & "\" & Tage
    Quelljpg = "H:\Fotos\Eigene Fotos\Fotoalbum\Zwischenspeicher3\*.jpg"
    Quellhtmlwenig = "H:\Fotos\Eigene Fotos\Fotoalbum\etc\unten\index.htm"
    Quellhtml = "H:\Fotos\Eigene Fotos\Fotoalbum\Zwischenspeicher3\index.htm"

    FileCopy Quelljpg, Zielordner
        FileCopy Quellhtmlwenig, Zielordner
        FileCopy Quellhtml, Zielordner
```

Es kommt der "Laufzeitfehler 52: Dateiname oder -nummer falsch" bei der ersten FileCopy Zeile. Was ist da falsch? Ich vermute ja dass die Quellangaben falsch sind, hab ich da Recht?

Stimmt eigentlich das *.jpg bei Quelljpg wenn ich alle Jpg-Dateien aus einem Ordner kopieren möchte?


----------



## Ein_Freund (7. April 2004)

Bist Du Dir im, ersten Pfad sicher mit  2x Monat?


----------



## ::emanuel:: (7. April 2004)

ja, bin mir sicher. das ist absicht  
das erstellen von directories funktioniert mit jahr/monat/monat/tag
ist deshalb so, weil ich die jetzige struktur beibehalten möchte.

Bin mir nur nicht mit Quelljpg sicher, das * irritiert mich ein wenig. Was sagst du?


----------



## thekorn (8. April 2004)

**.jpg definitiv FALSCH*

Also das mit dem *.jpg  nicht, da FileCopy eine eindeutige zuweisung benötigt.
Vorschlag: "File"-Objekt erstellen, und diese mit einer "For..Each"-Schleife in jedem Ordner abarbeiten. Dies geht zum Beispiel mit FSO .
Ich würde es so machen wie in diesem Beispiel, nur eben mit File anstatt Folder.

gruß
thekorn


----------



## ::emanuel:: (8. April 2004)

hi!  tja, bin nicht wirklich weitergekommen. ich hab jetzt folgenden code:

```
Dim fso1, file1, f11, folder1
    Dim ordner1 As String
    ordner1 = "H:\Fotos\Eigene Fotos\Fotoalbum\Zwischenspeicher3"
    Set fso1 = CreateObject("Scripting.FileSystemObject")
    Set file1 = fso.GetFolder(ordner1) '
    Set folder1 = file1.Files
    For Each f11 In folder1
    '
    Next
```
aber wie durchsucht man jetzt nach einem gewissen datentyp - in meinem fall jpg? muss man das bei Set file1 einstellen? Und was passiert dann nach For Each? Bitte helft mir - Danke!


----------



## ::emanuel:: (8. April 2004)

*grübl* weiß denn keiner genau wie man z.B. alle Jpg Dateien aus C:\ in C:\Temp kopiert?
Wäre für eure Hilfe wirklich sehr dankbar!


----------



## thekorn (8. April 2004)

*andere idee*

guten abend,
da du anscheind kein problem damit hast Bibliotheken in dein Projekt einzufügen   ,  habe ich noch einen anderen, einfacheren Vorschlag:
Die "Microsoft Office Object library" bietet mit "FileSearch" eine einfache Möglichkeit.
Also zunächst die oben genannte Library über Komponenten einfügen.
Anschließend hilft folgender Code:

```
Public Sub jpg_kopieren(pfad As String, ziel As String)

Set fs = Application.FileSearch
With fs
    .LookIn = pfad
    .Filename = "*.jpg"
    If .Execute > 0 Then
        MsgBox "There were " & .FoundFiles.Count & _
            " file(s) found."
        For i = 1 To .FoundFiles.Count
            FileCopy .FoundFiles(i), ziel & "bild" & i & ".jpg"
        Next i
    Else
        MsgBox "There were no files found."
    End If
End With

End Sub

Public Sub start()
jpg_kopieren "H:\Fotos\Eigene Fotos\Fotoalbum\Zwischenspeicher3", "H:\Fotos\Eigene Fotos\Fotoalbum\" & Jahr & "\" & Monat & "\" & Monat & "\" & Tage
End Sub
```

Hoffentlich klappts so wie du dir das vorstellst

gruß
thekorn


----------



## ::emanuel:: (9. April 2004)

> da du anscheind kein problem damit hast Bibliotheken in dein Projekt einzufügen


Sorry, aber ich hab erst diese Woche mit VB angefangen. Bin eigentlich eh recht erfreut darüber, wie weit ich schon bin.
Danke für die Antwort und den tollen Code!
Leider nummeriert der Code aber die Fotos neu. Statt dem i in folgender Zeile:

```
FileCopy .FoundFiles(i), ziel & "\" & i & ".jpg"
```
wäre der ursprüngliche Dateinamen gedacht. Ist das denn machbar?

Ach übrigens: Die hinzuzufügende Datei für FileSearch lautet bei mir Microsoft Access 9.0 Object Library. Wenn ich die Microsoft Office 9.0 Object Library hinzufüge zeigt das keine Wirkung. Und weiters geht die Microsoft Access 9.0 Object Library und die Microsoft Office 9.0 Object Library bei Komponenten nicht zum hinzufügen. Ich hab jetzt einfach bei Verweise die Microsoft Access 9.0 Object Library drin. Anm: Verwende VB 6.


----------



## thekorn (9. April 2004)

*Zusatzfunktion*

naja, mit dem einbinden hast du recht, wollte dich auch nicht kritisieren.

mit einer zusätzlichen Funktion kannst du den Dateinamen aus einer Pfadangabe extrahieren:

```
Public Sub jpg_kopieren(pfad As String, ziel As String)

Set fs = Application.FileSearch
With fs
    .LookIn = pfad
    .Filename = "*.jpg"
    If .Execute > 0 Then
        MsgBox "There were " & .FoundFiles.Count & _
            " file(s) found."
        For i = 1 To .FoundFiles.Count
            FileCopy .FoundFiles(i), ziel & extr_Dateiname(.FoundFiles(i))
        Next i
    Else
        MsgBox "There were no files found."
    End If
End With

End Sub

Public Sub start()
jpg_kopieren "H:\Fotos\Eigene Fotos\Fotoalbum\Zwischenspeicher3", "H:\Fotos\Eigene Fotos\Fotoalbum\" & Jahr & "\" & Monat & "\" & Monat & "\" & Tage
End Sub

Public Function extr_Dateiname(datein As String)
laenge = InStrRev(datein, "\")
extr_Dateiname = Right(datein, Len(datein) - laenge)
End Function
```

gruß
thekorn


----------



## ::emanuel:: (9. April 2004)

Vielen Dank für die tolle Antwort!
Es funktioniert jetzt genauso wie ich es haben wollte *freu*
LG,
Emanuel


----------

