当我用USB线将Android手机连接到Windows 7时,Windows会弹出一个窗口,并在Windows资源管理器中显示手机的内部存储空间Computer\HTC VLE_U\Internal storage
。但没有与此手机存储空间关联的驱动器号!在Windows资源管理器中,我可以操作文件系统。
我如何从C#程序中操作相同的文件或文件夹?
我测试过了,
DirectoryInfo di = new DirectoryInfo(@"C:\");
有用,但是
DirectoryInfo di = new DirectoryInfo(@"Computer\HTC VLE_U\Internal storage");
失败了。
但是在Windows资源管理器中,它是Computer\HTC VLE_U\Internal storage
!没有驱动器号!
是的,这是MTP器械。
我在Stack Overflow中看到了这个answer,但是在运行这段代码之后,返回结果为空
var drives = DriveInfo.GetDrives();
var removableFatDrives = drives.Where(
c=>c.DriveType == DriveType.Removable &&
c.DriveFormat == "FAT" &&
c.IsReady);
var androids = from c in removableFatDrives
from d in c.RootDirectory.EnumerateDirectories()
where d.Name.Contains("android")
select c;
我得到正确的drives
。但是android手机的内存不在这里。removableFatDrives
和androids
对我来说都是空的。
2条答案
按热度按时间vyswwuz21#
我使用了NugetPackage“Ralf Beckers V1. 8. 0的媒体设备”,这使我很容易将照片从设备复制到电脑上,反之亦然。
tjrkku2a2#
使用ZackOfAllTrades的代码,我在调用MediaDevice.DownloadFile(string,Stream)时遇到了OutOfMemoryException。
[1]转到项目属性,设置项目为构建x64,这似乎摆脱了OutOfMemoryException;我能够开始复制1GB到2GB之间的文件,没有任何问题。
[2]然而,当我开始复制2.5GB的文件时,ZackOfAllTrades的WriteStreamToDisk()实用程序函数就开始抱怨流太长。
DownloadFile接受一个Stream对象,它不需要是一个MemoryStream,所以我把它切换成了一个FileStream对象:
当我使用ZackOfAllTrades的代码时,VS分析器显示内存消耗大约是文件大小的2.5倍。如果文件大小为1.5GB,内存消耗大约为4GB,但如果直接复制到文件系统,内存消耗可以忽略不计(〈50 mb)。
另一个问题是MediaDevice.FriendlyName。我确信我的小米Note 10 Pro不支持FriendlyName。对我有效的是MediaDevice.Description。