是否可以在Windows中使用CreateFile以编程方式从iPhone读取图像?

Law*_*nti 5 windows filesystems iphone winapi createfile

将iPhone连接到Win7计算机时,可以使用资源管理器(和我的应用程序的打开文件对话框)查看图像。但是,文件位置不包含驱动器号。

例如,Computer\Apple iPhone\Internal Storage\DCIM\800AAAAA\IMG_0008.JPG代替E:\DCIM\800AAAAA\IMG_0008.JPGsdcard,usb驱动器等的常见...

我尝试使用CreateFileW从iPhone读取图像,但失败,并显示“(错误代码:3)系统找不到指定的路径。” 我也尝试过使用Chrome访问它们,但是它也失败了。

有什么建议么?

Pet*_*esh 3

该文件夹实际上是所谓的“虚拟文件夹”,并且在文件系统上没有完整路径。您将需要使用从打开的对话框返回的 shell 项来获取文件的内容,而不是使用 CreateFile。

数据应该是可访问的,但您应该遵循MSDN 文档中的说明。我确信可能有更好的例子(因为这仅提供指导)。

编辑粗略的过程是从 IFileOpenDialog 获取 IShellItem,然后绑定到流,然后读取流(假设只读) - 请记住,此代码几乎没有错误处理或检查或安全性:

if (pitem->GetDisplayName(SIGDN_NORMALDISPLAY, &destName) == S_OK) {
    std::cout << destName << std::endl;
    CoTaskMemFree(destName);
}
IStream *pistream;
if (pitem->BindToHandler(0, BHID_Stream, IID_PPV_ARGS(&pistream)) == S_OK) {
    char input[1024];
    long to_read = 1024;
    unsigned long read;
    while (S_OK == pistream->Read(input, to_read, &read)) {
       std::cout << input << std::endl;
    }
    pistream->Release();
}
pitem->Release();
Run Code Online (Sandbox Code Playgroud)