使用Stephen Toub的C#的IFileOperation包裝器(link),直到現在一直運行良好。現在我試圖做一個副本從網絡位置收集文件,每個網絡位置都放到它自己的子目錄中。使用IFileOperation在副本中創建目錄
\\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
爲一個不存在的目錄,而不是文件,但如何?