当前位置: 首页 > 编程语言 > C#

使用IFileOperation在副本期间创建目录分享

时间:2023-04-10 22:56:00 C#

C#学习教程:在复制期间使用IFileOperation创建目录现在我正在尝试复制以从网络位置收集文件,每个网络位置都放入其自己的子目录中。\FOOdata到C:\gatherFoo_data\BARmanagecurrent到C:\gatherbarmanage等。问题是FileOperation.CopyItem。一定是因为目标目录还不存在——IFileOperation会在复制过程中创建它,对吗?我使用了另一个问题的技术并将Toub的FileOperation.CreateShellItem更改为:}catch(FileNotFoundException){IntPtrpidl=SHSimpleIDListFromPath(路径);IShellItemisi=(IShellItem)SHCreateItemFromIDList(pidl,ref_shellItemGuid);Marshal.FreeCoTaskMem(pidl);System.Diagnostics.Debug.WriteNameLine("ShellisitemiGet:"(SIGDN.DesktopAbsoluteParsing));返回新的ComReleaser(isi);我把Debug.WriteLine放在那里检查它是否工作,它似乎工作;它写回路径。但是IFileOperation.CopyItem抛出ArgumentException并且我不明白为什么。我没有正确地为“不存在的文件”做“IShellItem”吗?我怀疑我需要在那里获取SFGAO_FOLDER,因为我正在尝试为不存在的目录而不是文件创建IShellItem,但是如何呢?在这个周末(这是一个疯狂的派对周末)进行了大量的谷歌搜索和编码实验之后,我找到了解决方案。编写一个实现IFileSystemBindData的COM兼容类。分配一个WIN32_FIND_DATA结构并设置它的dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY。(据我所知,其他成员在这里无关紧要。)创建IFileSystemBindData类的实例。将WIN32_FIND_DATA对象传递给IFileSystemBindData::SetFindData。创建IBindCtx的实例。使用参数STR_FILE_SYS_BIND_DATA(#definedasL"FileSystemBindData")和IFileSystemBindData对象调用其IBindCtx::RegisterObjectParam。使用要创建的目录的路径名和您的IBindCtx对象调用SHCreateItemFromParsingName。有用。绑定上下文对象告诉SHCreateItemFromParsingName不要查询文件系统,只使用它提供的内容。我让IFileOperation将文件复制到一个巧妙命名的新目录D:SomePathThatDidNotPreviouslyExist,它创建了所有七个目录。据推测,可以使用相同的技术为任何不存在的文件系统对象创建IShellItem,具体取决于您在dwFileAttributes中放置的内容。但它很丑。我希望有更好的方法。我的编码实验是用C++编写的;现在编写COM互操作的东西并在C#中完成。或者,放弃项目并使用C++重新开始可能更容易。以上就是C#学习教程:复制期间使用IFileOperation创建目录分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: