Criando diretórios durante uma cópia usando o IFileOperation
Usando o wrapper IFileOperation de Stephen Toub para C # (ligação), que tem funcionado bem até agora. Agora estou tentando fazer uma cópia para coletar arquivos de locais de rede, cada local de rede em seu próprio subdiretório.
\\FOO\data
para dentroC:\gather\Foo_data
\\BAR\manage\current
para dentroC:\gather\bar\manage
E assim por diante. O problema está emFileOperation.CopyItem
. Deve ser porque o diretório de destino ainda não existeIFileOperation
irá criá-lo durante a cópia, certo? Eu usei a técnica deoutra pergunta e mudou de ToubFileOperation.CreateShellItem
para isso:
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 );
}
}
Eu enfiei oDebug.WriteLine
lá para verificar se está funcionando e parece estar funcionando bem; ele escreve o caminho de volta.
MasIFileOperation.CopyItem
lança umArgumentException
e não consigo descobrir o porquê. Eu não estou fazendo o "IShellItem
para um arquivo inexistente "corretamente? Eu suspeito que eu preciso para obterSFGAO_FOLDER
lá, desde que eu estou tentando criar umIShellItem
para um inexistentediretório, não arquivo, mas como?