का उपयोग करके प्रतिलिपि के दौरान निर्देशिका बनाना C# (link) के लिए स्टीफन टब के IFileOperation wrapper का उपयोग करना, जो अब तक अच्छी तरह से काम कर रहा है। अब मैं नेटवर्क स्थानों से फ़ाइलों को इकट्ठा करने के लिए एक प्रतिलिपि करने की कोशिश कर रहा हूं, प्रत्येक नेटवर्क स्थान अपनी उपनिर्देशिका में है।IFileOperation
C:\gather\bar\manage
और इसी में 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
एक गैर-फाइल फ़ाइल के लिए" सही तरीके से नहीं कर रहा हूं? मुझे संदेह है कि मुझे वहां SFGAO_FOLDER
प्राप्त करने की आवश्यकता है, क्योंकि मैं को किसी भी 0xनिर्देशिका के लिए फ़ाइल नहीं, बल्कि कैसे?