首页 > 解决方案 > 使用 shell32 获得的便携式 USB 设备路径 - 路径中的字符无效

问题描述

我正在寻找一种方法来访问通过 USB 电缆连接的智能手机上的文件,使用标准的System.IO东西,比如DirectoryStreamReader.

使用以下代码,我获得了一条通往我的 USB 设备的非常邪恶的路径:

public string GetDevicePath()
{
    dynamic shell = Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));
    var folder = shell.BrowseForFolder(0, "Select your Android device", 0);
    if (folder == null)
    {
        // user closed the dialog
        return null;
    }
    var fi = (folder as Folder3).Self;
    return fi.Path;
}

这让我有一条像::{20D0AAAA-AAAA-AAAA-AAAA-0800AAAAAAAA}\\\?\usb#vid_12d1&pid_107e&mi_00#6&aaaaaaa&0&0000#{6ac2aaaa-aaaa-aaaa-aaaa-f98faaaaaaaa}. 我可以将它粘贴到 Windows 资源管理器地址栏中,它会重定向到类似This PC\Samsung\Internal Storage.

显然我不能用这条路做任何事情,例如Directory.GetFiles()因为我得到InvalidPathException.

如何从这样的路径访问文件?

标签: c#windowspathshell32system.io.directory

解决方案


这些代码在你那正常吗?

 public static string GetUsbPath(string usbLetterOrName) // "F:\" or "YourUsbName"
        {
            DriveInfo[] allDrives = DriveInfo.GetDrives();            
            foreach (DriveInfo d in allDrives)
            {
                if (d.DriveType == DriveType.Removable)
                {
                    if(d.Name == usbLetterOrName || d.VolumeLabel == usbLetterOrName)
                    {
                        return d.RootDirectory.FullName;
                    }
                }
            }
            throw new Exception("Drive not found");
        }

而不是访问usb中的所有文件

var files = new DirectoryInfo(GetUsbPath("MyUsb")).GetFiles()


推荐阅读