使用斯蒂芬Toub的IFileOperation包装为C#( 链接 ),它一直很好,直到如今。 现在我试图做一个副本从网络位置,每个网络位置到它自己的子目录中收集的文件。
\\FOO\data
到C:\gather\Foo_data
\\BAR\manage\current
为C:\gather\bar\manage
等等。 问题出在FileOperation.CopyItem
。 它必须是因为目标目录不存在yet- IFileOperation
将在复制过程中创建它,对吗? 我使用的技术从另一个问题 ,改变Toub的FileOperation.CreateShellItem
这样:
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 );
}
}
我卡住Debug.WriteLine
在那里,以检查它的工作,它似乎是做工精细; 回写出来的路径。
但是IFileOperation.CopyItem
抛出ArgumentException
,我想不通为什么。 我不能做“ IShellItem
一个不存在的文件”是否正确? 我怀疑我需要SFGAO_FOLDER
在那里,因为我想创建一个IShellItem
为不存在的 ,而不是文件,而是如何?