これまでうまく機能していたC#(link)用のStephen ToubのIFileOperationラッパーを使用します。今私はネットワークロケーションから各ネットワークロケーションを独自のサブディレクトリに集めるためにコピーを作成しようとしています。上C:\gather\bar\manage
コピー中にIFileOperationを使用してディレクトリを作成する
そしてそうにC:\gather\Foo_data
\\BAR\manage\current
に
\\FOO\data
。問題は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
」を正しく実行していませんか?存在しないディレクトリのIShellItem
を作成しようとしているので、SFGAO_FOLDER
を取得する必要があると思われます。ではなく、どのようにファイルを作成しますか?