Utilizzo del wrapper IFileOperation di Stephen Toub per C# (link), che ha funzionato bene fino ad ora. Ora sto cercando di fare una copia per raccogliere i file dalle posizioni di rete, ciascuna posizione di rete nella propria sottodirectory.Creazione di directory durante una copia utilizzando IFileOperation
\\FOO\data
in C:\gather\Foo_data
\\BAR\manage\current
in C:\gather\bar\manage
E così via. Il problema è in FileOperation.CopyItem
. Deve essere perché la directory di destinazione non esiste ancora- IFileOperation
la creerà durante la copia, giusto? Ho usato la tecnica da another question e cambiato Toub di FileOperation.CreateShellItem
a questo:
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);
}
}
ho bloccato il Debug.WriteLine
in là per controllare che sta funzionando, e sembra funzionare bene; scrive il percorso di nuovo.
Ma getta un ArgumentException
e non riesco a capire perché. Non sto facendo il "IShellItem
per un file inesistente" correttamente? Ho il sospetto che ho bisogno di ottenere SFGAO_FOLDER
lì, poiché sto cercando di creare un IShellItem
per una directory inesistente , non file, ma come?