private void CreateTree(MTPFileNode parentNode, IPortableDeviceContent content, IPortableDeviceProperties properties, IAsyncProgress asyn) { List <string> objectsId = GetChildrenObjectIds(content, parentNode.Id); if (objectsId != null && objectsId.Count > 0) { foreach (string objectId in objectsId) { IPortableDeviceValues objectValues; properties.GetValues(objectId, null, out objectValues); MTPFileNode fileNode = new MTPFileNode() { Type = GetFileTypeProperty(objectValues), Name = GetFullNameProperty(objectValues), //FileSize = GetFileSizeProperty(objectValues), Id = objectId, Childrens = new List <MTPFileNode>(), Parent = parentNode, //Level = parentNode.Level + 1 }; parentNode.Childrens.Add(fileNode); //asyn.Advance(0, string.Format(LanguageHelper.Get("LANGKEY_HuoQuJieDian_00555"), fileNode.Name)); if (fileNode.Type != MTPFileNodeType.File) { CreateTree(fileNode, content, properties, asyn); } } } }
public void GetDate(MTPDevice device, MTPFileNode fileNode) { IPortableDeviceContent content = GetDeviceContent(device.DeviceId); IPortableDeviceProperties properties; content.Properties(out properties); IPortableDeviceValues objectValues; properties.GetValues(fileNode.Id, null, out objectValues); //暂时只获取文件的创建、修改、最后访问时间 //由于不用手机设备对MTP协议的支持程度不同,导致不同设备可能获取到的多少不一致 fileNode.DateCreated = GetFileDateCreatedProperty(objectValues); fileNode.DateModified = GetFileDateModifiedProperty(objectValues); fileNode.DateAuthored = GetFileDateAuthoredProperty(objectValues); }
/// <summary> /// 从设备复制文件到本地 /// </summary> /// <param name="device"></param> /// <param name="file"></param> /// <param name="dstPath"></param> public bool CopyFileFromDevice(MTPDevice device, MTPFileNode file, string dstPath) { return(TransferContentFromDevice(Path.Combine(dstPath, file.Name), device.DeviceId, file.Id) == string.Empty); }
public MTPFileNode GetRootFileNode(MTPDevice device, IAsyncProgress asyn) { MTPFileNode root = new MTPFileNode() { Type = MTPFileNodeType.Root, Name = "Root", Childrens = new List <MTPFileNode>(), Level = -1 }; IPortableDeviceContent content = GetDeviceContent(device.DeviceId); IPortableDeviceProperties properties; content.Properties(out properties); IPortableDeviceValues deviceValues; properties.GetValues("DEVICE", null, out deviceValues); List <string> storagesId = GetChildrenObjectIds(content, "DEVICE"); //获取存储卡设备 //asyn.Advance(0, string.Format("获取到{0}个存储设备", storagesId.Count)); foreach (string storageId in storagesId) { MTPFileNode deviceNode = new MTPFileNode() { Type = MTPFileNodeType.Device, Name = GetNameById(storageId, properties), Id = storageId, Childrens = new List <MTPFileNode>(), Parent = root, //Level = 0 }; root.Childrens.Add(deviceNode); } foreach (var parentNode in root.Childrens) { //asyn.Advance(0, string.Format(LanguageHelper.Get("LANGKEY_KaiShiHuoQuDeWenJianXiTong_00553"), parentNode.Name)); List <string> objectsId = GetChildrenObjectIds(content, parentNode.Id); if (objectsId != null && objectsId.Count > 0) { foreach (string objectId in objectsId) { IPortableDeviceValues objectValues; properties.GetValues(objectId, null, out objectValues); MTPFileNode fileNode = new MTPFileNode() { Type = GetFileTypeProperty(objectValues), Name = GetFullNameProperty(objectValues), //FileSize = GetFileSizeProperty(objectValues), Id = objectId, Childrens = new List <MTPFileNode>(), Parent = parentNode, //Level = parentNode.Level + 1 }; parentNode.Childrens.Add(fileNode); //asyn.Advance(10.0 / root.Childrens.Count / objectsId.Count, string.Format(LanguageHelper.Get("LANGKEY_HuoQuJieDian_00554"), fileNode.Name)); if (fileNode.Type != MTPFileNodeType.File) { CreateTree(fileNode, content, properties, asyn); } } } } return(root); }
/// <summary> /// 获取MTP设备文件系统树 /// </summary> /// <param name="device"></param> /// <param name="asyn"></param> /// <returns>根节点</returns> public MTPFileNode GetRootFileNode(MTPDevice device, IAsyncTaskProgress asyn) { MTPFileNode root = new MTPFileNode() { Type = MTPFileNodeType.Root, Name = "Root", Childrens = new List <MTPFileNode>(), Level = -1 }; IPortableDeviceContent content = GetDeviceContent(device.DeviceId); IPortableDeviceProperties properties; content.Properties(out properties); IPortableDeviceValues deviceValues; properties.GetValues("DEVICE", null, out deviceValues); List <string> storagesId = GetChildrenObjectIds(content, "DEVICE"); //获取存储卡设备 foreach (string storageId in storagesId) { MTPFileNode deviceNode = new MTPFileNode() { Type = MTPFileNodeType.Device, Name = GetNameById(storageId, properties), Id = storageId, Childrens = new List <MTPFileNode>(), Parent = root, //Level = 0 }; root.Childrens.Add(deviceNode); } foreach (var parentNode in root.Childrens) { List <string> objectsId = GetChildrenObjectIds(content, parentNode.Id); if (objectsId != null && objectsId.Count > 0) { foreach (string objectId in objectsId) { IPortableDeviceValues objectValues; properties.GetValues(objectId, null, out objectValues); MTPFileNode fileNode = new MTPFileNode() { Type = GetFileTypeProperty(objectValues), Name = GetFullNameProperty(objectValues), //FileSize = GetFileSizeProperty(objectValues), Id = objectId, Childrens = new List <MTPFileNode>(), Parent = parentNode, //Level = parentNode.Level + 1 }; parentNode.Childrens.Add(fileNode); if (fileNode.Type != MTPFileNodeType.File) { CreateTree(fileNode, content, properties, asyn); } } } } return(root); }