如何管理 MTP 便携式设备上的文件?

Posted

技术标签:

【中文标题】如何管理 MTP 便携式设备上的文件?【英文标题】:How to manage files on an MTP Portable Device? 【发布时间】:2013-09-01 23:49:27 【问题描述】:

我已经研究这个话题好几天了,但我找不到任何关于在 MTP 便携式设备(更具体地说是 Galaxy S4)上管理文件的信息。

我希望能够...

将文件从 PC 复制到 MTP 设备 将文件从 MTP 设备复制到 PC 从 MTP 设备中删除文件

我真的很想复制 MP3 文件,但如果有一种通用的复制方式和 MTP 支持的文件,那就太棒了。我查看了 Window Portable Device API,但找不到任何有 C# 示例代码的地方。

任何博客、示例代码和文件都会非常有帮助。谢谢! :)

【问题讨论】:

嗨,Chrish,您对此有什么解决方案吗? 不,我没有,我正在研究 Windows SDK,但我不明白如何在我的项目中实现它。 【参考方案1】:

我使用了一个名为MediaDevices的nugetpackage

这让我很容易将我的照片从我的安卓手机复制到我的电脑上。

 public class Program

    static void Main(string[] args)
    
        var devices = MediaDevice.GetDevices();
        using (var device = devices.First(d => d.FriendlyName == "Galaxy Note8"))
        
            device.Connect();
            var photoDir = device.GetDirectoryInfo(@"\Phone\DCIM\Camera");

            var files = photoDir.EnumerateFiles("*.*", SearchOption.AllDirectories);

            foreach (var file in files)
            
                MemoryStream memoryStream = new System.IO.MemoryStream();
                device.DownloadFile(file.FullName, memoryStream);
                memoryStream.Position = 0;
                WriteSreamToDisk($@"D:\PHOTOS\file.Name", memoryStream);
            
            device.Disconnect();
        

    

    static void WriteSreamToDisk(string filePath, MemoryStream memoryStream)
    
        using (FileStream file = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.Write))
        
            byte[] bytes = new byte[memoryStream.Length];
            memoryStream.Read(bytes, 0, (int)memoryStream.Length);
            file.Write(bytes, 0, bytes.Length);
            memoryStream.Close();
        
    

【讨论】:

【参考方案2】:

还有一个名为 WPDApi 的 nuget 包,在我设法下载源代码后(在 nuget 上有问题),它对我很有效:

https://github.com/Duke-fleed/WPDApi

【讨论】:

以上是关于如何管理 MTP 便携式设备上的文件?的主要内容,如果未能解决你的问题,请参考以下文章

关于Android手机MTP模式连接的一些设置(win7和ubuntu下,以红米1s为例)

Android MTP 文件浏览Demo

怎么恢复在mtp设备中被 误删了的文件?

如何使用 PowerShell 可靠地将项目复制到 mtp 设备?

mtp模式下无法数据恢复,如何调整成为可移动存储器?

从 PowerShell 使用 System.IO 访问 MTP 存储