我正在寻找一种方法,使用标准的System.IO
(如Directory
和StreamReader
(访问通过USB电缆连接的智能手机上的文件。
我已经获得了一个非常邪恶的路径到我的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 PCSamsungInternal Storage
的内容。
显然,我不能用那个路径做任何事情,例如Directory.GetFiles()
,因为我得到了InvalidPathException
。
如何从这样的路径访问文件?
此代码适用于您吗?
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()