有方法直接访问PIDL对应的文件吗?

w29468 2017-05-12 09:33:02
包括拷贝、删除PIDL对应的文件,或访问其内容。
注意,是直接通过PIDL访问,而不是先把它转换为文件名去访问。

具体例子是,比如通过USB/MTP协议连接到PC上的,可以得到其PIDL,但是不能用SHGetPathFromIDList转化为文件名。这种对象如何通过PIDL去访问呢?
...全文
407 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2017-05-16
  • 打赏
  • 举报
回复
从应用程序,还是需要通过PIDL转换为路径,然后用CreateFile等API去访问
schlafenhamster 2017-05-16
  • 打赏
  • 举报
回复
其中 typedef struct tagID { LPSHELLFOLDER lpsfParent; LPITEMIDLIST lpi; LPITEMIDLIST lpifq; } TVITEMDATA, *LPTVITEMDATA;
schlafenhamster 2017-05-16
  • 打赏
  • 举报
回复

void CMyExploreView::PopulateList(LPTVITEMDATA lptvid) 
{//from lptvid->lpsfparent->current_folder
	LPSHELLFOLDER lpsf2=NULL;
    HRESULT hr;
// Initialize the list view to be empty.
	CListCtrl    &RightList=GetListCtrl();
    RightList.DeleteAllItems();
// ask for current folder
    if (lptvid)
    {
		hr=lptvid->lpsfParent->BindToObject(lptvid->lpi,
			0, IID_IShellFolder,(LPVOID *)&lpsf2);
		if (SUCCEEDED(hr))
		{// current dir oK
			FillListView(lpsf2,lptvid->lpifq);// 
			lpsf2->Release();
		//  then sorting
			RightList.SortItems(ListViewCompareProc,0);// name
		}
	}
}
hr=lptvid->lpsfParent->BindToObject(lptvid->lpi,
「已注销」 2017-05-15
  • 打赏
  • 举报
回复
访问这些设备一样需要用 CreateFile 并传入特定格式的字符串,至少微软并没有开放直接使用 PIDL 读取非文件,如通讯端口等数据。CreateFile 的路径可以传入这些格式的字符串: 本机文件: x:\path\file.ext \\?\x:\path\file.ext 共享文件: \\server\share\path\file.ext \\?\UNC\server\share\path\file.ext 通讯端口:(X为十进制数序号) COMX LTPX \\?\LTPX \\?\COMX 磁盘:(X为十进制数序号) \\.\CdRomX \\.\PhysicalDiskX \\.\Device\HarddiskVolumeX 以上是绝大多数,但我并不能保证齐全。另外,上面字符串是指参数的实际内容,在 C、Java 中,明文字符串中的反斜线需要转义,即写成两个。
三岁、就很帅 2017-05-13
  • 打赏
  • 举报
回复
自己封装下?假装是直接访问

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧