如何通过 c# windows 应用程序在 MTP 设备中创建文件夹?

How to create folder in MTP device by c# windows application?

我正在尝试将文件传输到 android MTP 设备中 windows 使用 C# 制作的应用程序。 如何在 windows 应用程序中的 MTP 设备上创建文件夹?

我正在使用 WPD API,我成功地将文件发送到 MTP 设备。

var WPD_OBJECT_PARENT_ID = new _tagpropertykey();
            WPD_OBJECT_PARENT_ID.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
            WPD_OBJECT_PARENT_ID.pid = 3 ;

我在 PortableDevices API 中阅读了以上代码。 我现在不知道 guid 是什么意思。

我以为api会支持创建文件夹的功能。 但是,但是,api只支持读取、写入和删除文件。

如何在 MTP 设备上创建文件夹? 或者,mtp 设备有什么好的 C# api 吗?

我参考了用 C++ 编写的便携式设备代码。 创建文件夹需要三个密钥。

  1. WPD_OBJECT_CONTENT_TYPE = WPD_CONTENT_TYPE_FOLDER
  2. WPD_OBJECT_PARENT_ID
  3. WPD_OBJECT_NAME
public void createFolder(string folderName, string parentObjectId)
{
    IPortableDeviceContent content;
    this._device.Content(out content);

    string objectID = null;

    IPortableDeviceValues values = GetRequiredPropertiesForFolderType(folderName, parentObjectId);
    content.CreateObjectWithPropertiesOnly(values, objectID);
}

private IPortableDeviceValues GetRequiredPropertiesForFolderType(string folderName, string parentObjectId)
{
    IPortableDeviceValues values = new PortableDeviceTypesLib.PortableDeviceValues() as IPortableDeviceValues;

    //type
    var WPD_OBJECT_CONTENT_TYPE = new _tagpropertykey();
    WPD_OBJECT_CONTENT_TYPE.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
    WPD_OBJECT_CONTENT_TYPE.pid = 7;

    var WPD_CONTENT_TYPE_FOLDER = new _tagpropertykey();
    WPD_CONTENT_TYPE_FOLDER.fmtid = new Guid(0x27E2E392, 0xA111, 0x48E0, 0xAB, 0x0C, 0xE1, 0x77, 0x05, 0xA0, 0x5F, 0x85);
    values.SetGuidValue(ref WPD_OBJECT_CONTENT_TYPE, WPD_CONTENT_TYPE_FOLDER.fmtid);

    var WPD_OBJECT_PARENT_ID = new _tagpropertykey();
    WPD_OBJECT_PARENT_ID.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
    WPD_OBJECT_PARENT_ID.pid = 3;
    values.SetStringValue(ref WPD_OBJECT_PARENT_ID, parentObjectId);

    //name
    var WPD_OBJECT_NAME = new _tagpropertykey();
    WPD_OBJECT_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
    WPD_OBJECT_NAME.pid = 4;
    values.SetStringValue(WPD_OBJECT_NAME, folderName);

    return values;
}