使用 Stephen Toub 的 C# 的 IFileOperation 包装器(链接),它一直运行良好,直到现在。现在我正在尝试复制以从网络位置收集文件,每个网络位置到它自己的子目录中。
\\FOO\data
进C:\gather\Foo_data
\\BAR\manage\current
进C:\gather\bar\manage
等等。问题出在FileOperation.CopyItem
. 一定是因为目标目录还不存在——<code>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
为不存在的目录而不是文件创建一个目录,但是如何?