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