# Ordner kopieren und unbennenen



## DexXxtrin (15. August 2008)

Hallo zusammen
Ich möchte einene Ordner kopieren (gesammt Unterordner) und unbennenen.

Beispiel:

Original Ordner C:\Programme\Beispiel\*Ordner*

"Ordner" soll kopiert werden und unbennant in Ordner_New nach:

C:\Programme\Beispiel\*Ordner_New*

Nun kam ich auf die Idee, einfach einen Neuen Ordner zu erstellen, diesen Ordner_New zu nennen und den Inhalt von Ordner nach Ordner_New zu kopieren. Wie kann ich den gesammten Inhalt kopieren?


Gruss DexXxtrin


----------



## Masterclavat (16. August 2008)

Schau dir mal diese Seite an.


----------



## wincnc (16. August 2008)

Hallo, hier ein Beispiel.

Aufruf in Form:

```
Private Sub Command1_Click()
  fCopy "C:\Programme\Beispiel\Ordner", "C:\Programme\Beispiel\Ordner_New", True
End Sub
```
Modul:

```
Private Const FN_COPY = &H2&
Private Const FN_DELETE = &H3&
Private Const FN_MOVE = &H1&
Private Const FN_RENAME = &H4&
Private Const FNF_ALLOWUNDO = &H40&
Private Const FNF_CONFIRMMOUSE = &H2&
Private Const FnF_CREATEPROGRESSDLG = &H0&
Private Const FnF_FILESONLY = &H80&
Private Const FnF_MULTIDESTFILES = &H1&
Private Const FnF_NOCONFIRMATION = &H10&
Private Const FnF_NOCONFIRMMKDIR = &H200&
Private Const FnF_RENAMEONCOLLISION = &H8&
Private Const FnF_SILENT = &H4&
Private Const FnF_SIMPLEPROGRESS = &H100&
Private Const FnF_WANTMAPPINGHANDLE = &H20&

Private Declare Function SHFileOperation Lib "shell32.dll" _
  Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) _
  As Long

Type SHFILEOPSTRUCT
  Hwnd As Long
  wFunc As Long
  pFrom As String
  pTo As String
  fFlags As Integer
  fAnyOperationsAborted As Boolean
  hNameMappings As Long
  lpszProgressTitle As String
End Type

Public Function fCopy(Source As String, Dest As String, _
  Ueberschreiben As Boolean) As Long
  
  Dim FileStructur As SHFILEOPSTRUCT
  Dim FLAG As Integer
  
  FLAG = 0
  If InStr(Source, vbNullChar + vbNullChar) > 0 Then _
    FLAG = FLAG + FnF_MULTIDESTFILES
  
  If InStr(Source, "*") > 6 Then _
    FLAG = FLAG + FnF_FILESONLY
  
  If Ueberschreiben = True Then _
    FLAG = FLAG + FnF_RENAMEONCOLLISION
  
  With FileStructur
    .Hwnd = Screen.ActiveForm.Hwnd
    .wFunc = FN_COPY
    .pFrom = Check_NullChars(Source)
    .pTo = Dest
    .fFlags = FLAG
  End With
  
  fCopy = SHFileOperation(FileStructur)

End Function

Public Function fDelete(Source As String, DelToTrash As _
  Boolean, ShowDialog As Boolean) As Long
  
  Dim FileStructur As SHFILEOPSTRUCT
  Dim Flags As Long
  
  Flags = 0
  If DelToTrash Then Flags = FNF_ALLOWUNDO
  If Not ShowDialog Then Flags = Flags Or FnF_NOCONFIRMATION
  
  With FileStructur
    .Hwnd = Screen.ActiveForm.Hwnd
    .wFunc = FN_DELETE
    .pFrom = Check_NullChars(Source)
    .fFlags = Flags
  End With
  
  fDelete = SHFileOperation(FileStructur)
End Function

Public Function fMove(Source As String, _
  Dest As String) As Long
  
  Dim FileStructur As SHFILEOPSTRUCT
  
  With FileStructur
    .Hwnd = Screen.ActiveForm.Hwnd
    .wFunc = FN_RENAME
    .pFrom = Check_NullChars(Source)
    .pTo = Dest
    .fFlags = FnF_RENAMEONCOLLISION + FnF_SILENT
  End With
  
  fMove = SHFileOperation(FileStructur)
End Function

Public Function fRename(Source As String, _
  Dest As String) As Long
  
  Dim FileStructur As SHFILEOPSTRUCT
  
  With FileStructur
    .Hwnd = Screen.ActiveForm.Hwnd
    .wFunc = FN_RENAME
    .pFrom = Check_NullChars(Source)
    .pTo = Dest
    .fFlags = FnF_RENAMEONCOLLISION + FnF_SILENT
  End With
  
  fRename = SHFileOperation(FileStructur)
End Function

Public Function FilesFromArray(Liste() As String) As String
  Dim i As Long
  Dim temp As String
  
  For i = 0 To UBound(Liste)
    If FileExists(Liste(i)) Then
      temp = temp + Liste(i) + vbNullChar
    Else
      MsgBox (Liste(i) & "existiert hier nicht")
    End If
  Next
  
  FilesFromArray = temp + vbNullChar
End Function

Private Function Check_NullChars(S As String) As String
  If Right(S, 2) <> vbNullChar + vbNullChar Then
    If Right(S, 1) <> vbNullChar Then
      S = S + vbNullChar + vbNullChar
    Else
      S = S + vbNullChar
    End If
  End If
  Check_NullChars = S
End Function

Public Function FileExists(ByVal Filename As String) _
  As Boolean
  
  FileExists = (Dir(Filename) <> "")
End Function
```


----------



## DexXxtrin (16. August 2008)

Masterclavat hat gesagt.:


> Schau dir mal diese Seite an.



Vielen Dank für deine Hilfe.
Jetzt habe ich nur noch ein Problem:

Bei:  .pFrom = Check_NullChars(Source)
Kommt die Meldung "Check_NullChars wurde nicht definiert"
Was kann ich tun? (Arbeite mit VB2008)


----------



## Masterclavat (16. August 2008)

Da VB2008 eine .NET Sprache ist, bist du hier im falschen Foren-Bereich. Es gibt nämlich ein extra Forum für .NET.

In VB08 ist es noch viel einfacher, deine Frage zu beantworten:


```
Dim Directory As New DirectoryInfo("C:\Programme\Beispiel\Ordner")
Directory.MoveTo("C:\Programme\Beispiel\Ordner_New")
```


----------



## DexXxtrin (16. August 2008)

Masterclavat hat gesagt.:


> Da VB2008 eine .NET Sprache ist, bist du hier im falschen Foren-Bereich. Es gibt nämlich ein extra Forum für .NET.
> 
> In VB08 ist es noch viel einfacher, deine Frage zu beantworten:
> 
> ...



Ohh das wusste ich nid, tut mir leid!

Noch kurz eine Frage zu dem Code:
Kopiert dieser den gesammten Ordner oder nur den Inhalt?
Und bei DirectoryInfo kommt wieder, dass es nicht deklariert ist...!?


----------



## Masterclavat (16. August 2008)

Ach so tut mir Leid, habe etwas vergessen 

Entweder du schreibst ganz oben 

```
Imports System.IO
```

Oder du veränderst den Code so:


```
Dim Directory As New System.IO.DirectoryInfo("C:\Programme\Beispiel\Ordner")
Directory.MoveTo("C:\Programme\Beispiel\Ordner_New")
```

Der Code kopiert den ganzen Ordner mitsamt allen Unterordnern.


----------

