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 einArgumentExceptionund 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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage