Vista - Verzeichnis kopieren

03/10/2007 - 14:43 von Stefan Simon | Report spam
Hallo,

ich möchte ein Verzeichnis kopieren (incl. Unterverzeichnisse und Dateien)
und dafür den Windows Dialog verwenden. Dazu benutze ich unten stehenden
Code. Unter Windows XP funktioniert das auch, nur Vista will nicht wirklich.
Bei jedem Verzeichnis werde ich gefragt, ob ich das Verzeichnis wirklich
erstellen möchte oder doch lieber überspringen oder abbrechen. Natürlich
möchte ich das Zielverzeichnis und die notwendigen Unterverzeichnisse
erstellen, und das möglichst ohne Nachfrage.

Gibts dafür vielleicht ein Flag, das ich bisher nicht gefunden habe?

tia,
Stefan

\\\ leere Form
Imports system.Runtime.InteropServices
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim from As String = "D:\tmp\TestVerz"
Dim [To] As String = "C:\Temp"
CopyDirectory(from, [To])
End Sub

#Region "CopyDir"
<Runtime.InteropServices.StructLayout(LayoutKind.Sequential, Pack:=1)> _
Public Structure SHFILEOPSTRUCT
Dim hWnd As Integer
Dim wFunc As Integer
Dim pFrom As String
Dim pTo As String
Dim fFlags As Short
Dim fAborted As Boolean
Dim hNameMaps As Integer
Dim sProgress As String
End Structure

Public Const FO_MOVE As Integer = &H1
Public Const FO_COPY As Integer = &H2
Public Const FO_DELETE As Integer = &H3
Public Const FO_RENAME As Integer = &H4

Public Const FOF_SILENT As Integer = &H4
Public Const FOF_RENAMEONCOLLISION As Integer = &H8
Public Const FOF_NOCONFIRMATION As Integer = &H10
Public Const FOF_SIMPLEPROGRESS As Integer = &H100
Public Const FOF_ALLOWUNDO As Integer = &H40

Protected Declare Unicode Function SHFileOperation Lib "shell32" _
(ByRef lpFileOp As SHFILEOPSTRUCT) As Integer

Private Sub CopyDirectory(ByVal From As String, ByVal [To] As String)
Dim SFO As New SHFILEOPSTRUCT
Dim erg As Integer
With SFO
.hWnd = 0
.wFunc = FO_COPY
.pFrom = From
.pTo = [To]
.fFlags = FOF_ALLOWUNDO
End With
erg = SHFileOperation(SFO)
End Sub
#End Region

End Class
///
 

Lesen sie die antworten

#1 Stefan Simon
03/10/2007 - 15:13 | Warnen spam
"Stefan Simon" schrieb im Newsbeitrag
news:47038e61$0$30374$
Bei jedem Verzeichnis werde ich gefragt, ob ich das
Verzeichnis wirklich erstellen möchte oder doch lieber überspringen
oder abbrechen.



Hmm, ich nehme alles zurück und behaupte das Gegenteil. Schuld an diesem
Verhalten ist offenbar UAC. Die Abfrage kommt dann, wenn der
Standardbenutzer ein Verzeichnis dorthin kopieren will, wo er keine
Schreibberechtigung hat. Bei jedem zu kopierenden Element fragt Vista nach,
ob das Element erstellt werden soll (es gibt auch die Option "ja für
alles"), und schiebt trotzdem alles nicht etwa an das angegebene Ziel
sondern in den VirtualStore des Benutzers. Unter XP war alles irgendwie
einfacher. Da bekam man den Fehlercode 5 und man wusste was los war.

Stefan

Ähnliche fragen