Verzeichnisse während einer Kopie mit IFileOperation erstellen
Verwenden des IFileOperation-Wrappers von Stephen Toub für C # (Verknüpfung), was bisher gut funktioniert hat. Jetzt versuche ich, eine Kopie zu erstellen, um Dateien von Netzwerkstandorten zu sammeln, wobei sich jeder Netzwerkstandort in einem eigenen Unterverzeichnis befindet.
\\FOO\data
inC:\gather\Foo_data
\\BAR\manage\current
inC:\gather\bar\manage
Und so weiter. Das Problem ist inFileOperation.CopyItem
. Dies muss daran liegen, dass das Zielverzeichnis noch nicht existiert.IFileOperation
wird es während des Kopierens erstellen, oder? Ich habe die Technik auseine andere Frage und änderte ToubsFileOperation.CreateShellItem
dazu:
private static ComReleaser<IShellItem> CreateShellItem( string path )
{
try
{
return new ComReleaser<IShellItem>( (IShellItem)SHCreateItemFromParsingName( path, null, ref _shellItemGuid ) );
}
catch ( FileNotFoundException )
{
IntPtr pidl = SHSimpleIDListFromPath( path );
IShellItem isi = (IShellItem)SHCreateItemFromIDList( pidl, ref _shellItemGuid );
Marshal.FreeCoTaskMem( pidl );
System.Diagnostics.Debug.WriteLine( "Shell item: " + isi.GetDisplayName( SIGDN.DesktopAbsoluteParsing ) );
return new ComReleaser<IShellItem>( isi );
}
}
Ich steckte dieDebug.WriteLine
dort, um zu überprüfen, ob es funktioniert, und es scheint gut zu funktionieren; es schreibt den Pfad zurück.
AberIFileOperation.CopyItem
wirft einArgumentException
und ich kann nicht herausfinden warum. Mache ich nicht die "IShellItem
für eine nicht vorhandene Datei "richtig? Ich vermute, ich muss bekommenSFGAO_FOLDER
da drin, da ich versuche einen zu erstellenIShellItem
für eine nicht existierendeVerzeichnis, nicht Datei, aber wie?