用C#的MediaDevices程序集打开MTP设备(用usb线连接的手机)的文件夹

news2024/10/7 7:26:31

一、任务描述

1、可以访问MTP设备的桌面程序。

MTP设备:支持媒体传输协议(MTP)的设备,MTP简单来说就是一种PC与其他设备相连的一种协议,智能手机、平板电脑、数码相机等可以通过 USB 连接到电脑,并通过 MTP 协议传输媒体文件。点开我的电脑,如图所示的“PDT-90P”的图标就是MTP设备,拿手机和电脑相连后选择连接模式为“传输文件”,使用的就是MTP协议。

可以访问MTP设备的桌面程序 :C#广泛应用于开发 Windows 桌面应用程序。桌面程序通过MTP协议访问MTP设备可以方便进行媒体管理、设备交互、多设备互通、及其他自定义功能,提升用户体验。

2、MediaDevices程序集

MediaDevices 是一个开源程序集,它允许 .NET 开发者访问和操作 MTP(媒体传输协议)设备的内容。MediaDevices 程序集通常用于在电脑和 MTP 设备之间传输文件,而无需为每个设备安装特定的驱动程序

3、任务目标

1、设计一个C#的类的方法,调用该方法即可访问某个MTP设备的相应文件夹。

2、设计一个C#程序,要求:运行程序时打开某一个MTP设备相应文件夹(内部存储设备\SysSetting)下的一个文件(teste.txt),并将其中的内容

二、编程

假设我们使用的是VS2022进行C#开发

1、为项目调用MediaDevices程序集

点击项目——>管理nuget程序包——>

浏览——>搜索mediadevices——>安装(因为已经安装了,所以目前是卸载。)

等下边的输出框弹出:包已添加到XXX说明已经安装并配置完毕了

 2、调用命名空间

using MediaDevices;

3、连接到我们需要的设备:

MediaDevice类

MediaDevice类是mediadevices程序集的主要类之一,设备类,表示一个便携式设备。我们用到的主要属性包括:

Description:设备简介、一般是设备的类型

FriendlyName:设备名称、可以通过重命名更改

Manufacturer:设备的制造商名称

DeviceId:设备标识符(id)

Model:设备型号

IsConnected:设备是否已连接

用到的主要方法包括:

GetDevices():遍历设备目录;返回值为一组便携式设备对象组成列表

Connect():连接方法,连接上该对象的设备

GetRootDirectory():这个方法会返回一个代表设备根目录的 MediaDirectoryInfo 对象

            string deviceFriendlyName = "PDT-90P";
            // 获取所有连接的设备
            var devices = MediaDevice.GetDevices();
            // 找到并连接到特定的设备
            var device = devices.FirstOrDefault(d => d.Description == deviceFriendlyName);
            device.Connect();

 var device = devices.FirstOrDefault(d => d.Description == deviceFriendlyName); 遍历devices列表的所有元素,将其中Description = deviceFriendlyName(一个局部变量变量)的第一个元素作为返回值返回。

4、跳转至相应目录

MediaDirectoryInfo类

 MTP 设备上的目录类(你也可以理解为文件夹类),提供了用于访问和操作 MTP 设备上文件夹和目录的各种方法和属性。

用到的主要属性包括

FullName:存储当前目录

主要方法包括:

EnumerateDirectories:返回当前目录中的可枚举目录信息集合。

            //设置路径
            string folderPath = @"内部存储设备\SysSetting";
            //创建目录对象
            MediaDirectoryInfo currentFolder = device.GetRootDirectory();
            //拆分路径、分步进入
            string[] pathParts = folderPath.Split('\\');
            foreach (string part in pathParts)
            {
                if (!string.IsNullOrEmpty(part))
                {
                    currentFolder = currentFolder.EnumerateDirectories()
                        .FirstOrDefault(dir => dir.Name.Equals(part, StringComparison.OrdinalIgnoreCase));
                    if (currentFolder == null)
                    {
                        throw new DirectoryNotFoundException($"Folder '{part}' not found.");
                    }
                }
            }

 currentFolder = currentFolder.EnumerateDirectories().FirstOrDefault(dir => dir.Name.Equals(part, StringComparison.OrdinalIgnoreCase));  是一套组合拳,其目的是遍历当前目录的子目录并把子目录中名称和“part”一样的文件夹返回,也就是找到对应的文件夹并点进去。

可以用一下代码进行检验成果

            //返回当前目录
            Console.WriteLine(currentFolder.FullName);
            //在当前目录下建立一个名叫xiaoyu的文件夹
            currentFolder.CreateSubdirectory("xiaoyu");

至此我们的任务1就已经完成了,接下来是任务二的部分

5、 打开目标文件,并将内容下载下来

            /* 打开文件 */
            //创建完整路径
            string fileName = "texte.txt";
            string pcfolderPath = @"G:\eastIC_sdk\数据库\";
            string filePath = Path.Combine(folderPath, fileName);   //设备端的路径
            string pcfilePath = Path.Combine(pcfolderPath, fileName);  //pc端的路径
            Stream fileStream = File.Create(pcfilePath);  //创建流对象
            device.DownloadFile(filePath, fileStream); //下载
            fileStream.Flush(); //写入
            fileStream.Close(); //关闭流
            device.Disconnect();

目标设备路径为:"内部存储设备\\SysSetting\\texte.txt"

下载路径为:"G:\\eastIC_sdk\\数据库\\texte.txt"

这里无论下载路径上是否事先创建相关文件夹和文件,系统都会自动创建给你

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1885819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开发环境】MacBook M2安装git并拉取gitlab项目,解决gitlab出现Access Token使用无效的方法

文章目录 安装Homebrew安装git打开IDEA配置git打开IDEA拉取项目 安装Homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"在iTerm等命令行工具打开后,输入上面的命令 之后根据中文提示完成Homebrew的下载…

奇葩公司又发微博了,网友表示“乐”

多益网络 近日,多益网络官方微博发帖,公然表示对法院仲裁结果不服,认为劳动法有极多问题。 大家不要看微博内容似乎振振有词,极有可能只是多益网络单方面的选择性表达,毕竟多益网络的臭名早就家喻户晓。 况且对前员工直…

mybatis、mybatis-plus插件开发,实现数据脱敏功能

首先说一下mybatis中四大组件的作用,下面开发的插件拦截器会使用 四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler Executor: Executor 是 MyBatis 中的执行器,负责 SQL 语句的执行工作。它通过调度 StatementHan…

蓝桥杯算法双周赛

四、赛后真题解析 比赛赛后将提供免费直播讲解,主讲人:待定。时间:07 月 13 日(比赛当日)晚 21 时。观看直播地址:第3场蓝桥算法季度赛赛后题解直播 - 蓝桥云课 - 哔哩哔哩直播,二次元弹幕直播…

为什么电量传感器在储能BMS应用中如此重要?

在储能系统中电池的充放电状态和使用寿命是保障系统健康稳定持久运行的关键因素,因此建立稳定可靠准确的电量检测方案至关重要。电流传感器在估算和延长电池使用寿命方面发挥着至关重要的作用,是储能电池检测系统中重要的一环。 关键词:电量…

vue选择上下周,拖拽列表,随机背景色

安装拖拽插件 npm install vuedraggable <template><!--排产计划--><div class"app-container"><div class"mainbox"><div class"table-container table-fullscreen"><div class"title-name">…

向openHarmony设备添加gdb调试工具

1. 下载gdb源码 国内从官网下载源码比较慢&#xff0c;可以从清华的镜像网站&#xff08;清华大学开源软件镜像站 | Tsinghua Open Source Mirror&#xff09;上下载。下载地址&#xff1a; Index of /gnu/gdb/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择…

喜讯|华院计算认知智能引擎算法平台荣登BPAA大赛创新组TOP50

6月25日&#xff0c;备受瞩目的BPAA第四届全球应用算法模型典范大赛&#xff08;以下简称“BPAA大赛”&#xff09;正式揭晓了《第四届全球应用算法模型典范大赛创业组TOP50榜单》和《第四届全球应用算法模型典范大赛创新组TOP50榜单》。其中&#xff0c;华院计算技术&#xff…

Python课程设计:python制作俄罗斯方块小游戏

基于python的俄罗斯方块小游戏 目录 基于python的俄罗斯方块小游戏 1.概述 1.1 摘要 1.2 开发背景 1.3 开发环境 1.4 实现功能 2.代码描述 2.1 模块导入 2.2 初始化变量 2.3 播放音乐 2.4 创建方块类 2.5 绘制游戏地图 2.6 游戏初始化 2.7 绘制有边框矩形 2.8 …

go使用grpc编辑器 windows

先看最后效果&#xff1a; 当我执行 protoc --go_out. proto.proto 会生成proto.pb.go文件&#xff0c;主要存储的是封装好的结构体 执行 protoc --go-grpc_out. proto.proto 会生成对应的方法 那么现在提供解决方案&#xff1a; https://github.com/protocolbuffers…

kafka的架构

一、架构图 Broker&#xff1a;一台 kafka 服务器就是一个 broker。一个kakfa集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 Producer&#xff1a;消息生产者&#xff0c;就是向 kafka broker 发消息的客户端 Consumer&#xff1a;消息消费者&#xff0c;向 kafk…

软考中级系统集成项目管理工程师备考笔记

目录 一&#xff0c;通用内容 &#xff08;一&#xff09;信息与信息化 1.1&#xff0c;信息 信息基本概念 信息的传输模型 信息的质量属性 1.2&#xff0c;信息系统 信息系统的基本概念 信息系统定义 信息系统集成 1.3&#xff0c;信息化 信息化层次 信息化的核心…

Prometheus在金融行业信息系统运维管理中的应用:实践与案例分析

Prometheus在金融行业信息系统运维管理中的应用&#xff1a;实践与案例分析 Prometheus是一款开源的监控系统和时序数据库&#xff0c;被广泛应用于各种行业的运维管理中&#xff0c;特别是在金融行业。它具有强大的数据采集和分析能力&#xff0c;能够实时监控系统的性能和状…

华为eNSP模拟器安装详细步骤

安装准备 安装eNSP需要先安装三个依赖软件才能运行&#xff0c;分别是VirtualBox、WinPcap、Wireshark 下载地址如下 eNSP&#xff1a;http://cloud.rsecc.cn/softlink/eNSP%20V100R003C00SPC100%20Setup.exe VirtualBox&#xff1a;http://cloud.rsecc.cn/softlink/Virtua…

Steam页面打不开?steam显示当前游戏不可用是怎么回事

Steam是全球最大的游戏综合发行平台&#xff0c;每年为无数玩家呈现了多款精彩游戏&#xff0c;不过由于网络问题或其他异常因素影响&#xff0c;有很多玩家会在访问steam或steam的游戏商品页时&#xff0c;遇到Steam提示当前游戏在您平台不可用、打不开游戏页面的情况&#xf…

自动化测试报告pytest-html样式美化

最近我将 pytest-html 样式优化了 一版 先看优化前&#xff1a; 优化后&#xff1a; 优化内容包括&#xff1a; 删除部分多余字段新增echart图表部分字体大小、行间距、颜色做了美化调整运行环境信息移至报告最后部分字段做了汉化处理&#xff08;没全部翻译是因为&#xf…

七天速通javaSE:第七天 面向对象:封装继承与多态

文章目录 前言一、封装1. 属性私有2. get&#xff0c;set3. 修饰符的可访问性4. 特点总结 二、继承1. 子承父业&#xff1a;extends2. 区分父子&#xff1a;super2.1 属性2.2 方法重写 三、多态&#xff08;不同类继承同一个类&#xff09; 前言 一、封装 概念&#xff1a;封装…

等保测评应该选择什么样的SSL证书

选择适合等保测评的SSL证书&#xff0c;需考虑证书的加密强度、认证机制以及是否满足国家相关的密码技术要求 1、证书类型&#xff1a;应选择符合国家或行业标准的SSL证书&#xff0c;这些证书通常采用RSA、DSA或ECC等国际认可的加密算法。同时&#xff0c;考虑到国内特定的合规…

IP地址修改方法攻略:类型、步骤与注意事项

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;其重要性不言而喻。然而&#xff0c;在某些特定场景下&#xff0c;如保护个人隐私、绕过网络限制或实现特定网络访问需求&#xff0c;修改IP地址就显得尤为关键。本文将详细介绍IP地址修改方法有哪几种类型…

13. Java 生产者与消费者案例

1. 前言 本节内容是通过之前学习的 synchronized 关键字&#xff0c;实现多线程并发编程中最经典的生产者与消费者模式&#xff0c;这是本节课程的核心内容&#xff0c;所有的知识点都是围绕这一经典模型展开的。本节有如下知识点&#xff1a; 生产者与消费者模型介绍&#x…