【发布时间】:2012-08-07 18:42:35
【问题描述】:
使用 Stephen Toub 的 C# 的 IFileOperation 包装器 (link),到目前为止一直运行良好。现在我正在尝试复制以从网络位置收集文件,每个网络位置到它自己的子目录中。
\\FOO\data 变成 C:\gather\Foo_data\\BAR\manage\current 变成 C:\gather\bar\manage
等等。问题出在FileOperation.CopyItem。一定是因为目标目录还不存在——IFileOperation 会在复制过程中创建它,对吧?我使用了another question 中的技术并将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,而不是文件,但是如何?
【问题讨论】: