static void Main() { //Connect to MTP devices and pick up the first one var devices = new PortableDeviceCollection(); devices.Refresh(); Tablet = devices.First(); Tablet.Connect(); //Getting root directory var root = Tablet.GetContents(); //Displayinh directory content in console foreach (var resource in root.Files) { DisplayResourceContents(resource); } //Finding neccessary folder inside the root var folder = (root.Files.FirstOrDefault() as PortableDeviceFolder). Files.FirstOrDefault(x => x.Name == "Folder") as PortableDeviceFolder; //Finding file inside the folder var file = (folder as PortableDeviceFolder)?.Files?.FirstOrDefault(x => x.Name == "File"); //Transfering file into byte array var fileIntoByteArr = Tablet.DownloadFileToStream(file as PortableDeviceFile); //Transfering file into file system Tablet.DownloadFile(file as PortableDeviceFile, "\\LOCALPATH"); //Transfering file rom file system into device folder Tablet.TransferContentToDevice("\\LOCALPATH", folder.Id); //Transfering file from stream into device folder var imgPath = "\\LOCALPATH"; var image = Image.FromFile(imgPath); byte[] imageB; using (var ms = new MemoryStream()) { image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); imageB = ms.ToArray(); } Tablet.TransferContentToDeviceFromStream("FILE NAME", new MemoryStream(imageB), folder.Id); //Close the connection Tablet.Disconnect(); Console.WriteLine(); Console.WriteLine("Press any key to continue."); Console.ReadKey(); }
public static int TransferCommand(CommandLineItemCollection commandLine) { int?exitCode; PrintCommandName(); var deviceId = commandLine.GetArgument(0)?.Value; var sourceDirectoryPath = commandLine.GetArgument(1)?.Value; var targetDirectoryPath = commandLine.GetArgument(2)?.Value; if (string.IsNullOrEmpty(targetDirectoryPath) || !Directory.Exists(targetDirectoryPath)) { Console.WriteLine($"[{nameof(EXIT_CODE_TARGET_DIRECTORY_NOT_FOUND)}]"); return(EXIT_CODE_TARGET_DIRECTORY_NOT_FOUND); } var tempTargetDirectoryPath = Path.Combine(targetDirectoryPath, $".{nameof(BlinctureMTP)}-temp", Guid.NewGuid().ToString("N")); SetHidden(CreateDirectoryIfMissing(tempTargetDirectoryPath)); PortableDevice device = default; PortableDeviceFolder directory; try { (exitCode, device, directory) = ConnectAndGetDeviceAndDirectory(deviceId, sourceDirectoryPath); if (exitCode.HasValue) { return(exitCode.Value); } foreach (var file in directory.Files.OfType <PortableDeviceFile>()) { Spinner.Start($"Transfering '{file.Name}' ...", spinner => { var flagTargetFilePath = Path.Combine(targetDirectoryPath, $".{nameof(BlinctureMTP)}-flags", file.Name); SetHidden(CreateContainingDirectoryIfMissing(flagTargetFilePath)); if (File.Exists(flagTargetFilePath)) { spinner.Info("File already transferred."); return; } var tempTargetFilePath = Path.Combine(tempTargetDirectoryPath, file.Name); string targetFileName; using (var tempTargetFileStream = new FileStream(tempTargetFilePath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read)) { var data = device.DownloadFileToStream(file); tempTargetFileStream.Write(data, 0, data.Length); tempTargetFileStream.Position = 0; targetFileName = GetTargetFileName(commandLine, file.Name, tempTargetFileStream, spinner); tempTargetFileStream.Close(); } var targetFilePath = Path.Combine(targetDirectoryPath, targetFileName); CreateContainingDirectoryIfMissing(targetFilePath); File.Move(tempTargetFilePath, targetFilePath); File.WriteAllText(flagTargetFilePath, DateTimeOffset.Now.ToString("O"), Utf8Encoding); spinner.Succeed($"Transferred '{file.Name}' as '{targetFileName}'."); }); } } finally { device?.Disconnect(); } Directory.Delete(tempTargetDirectoryPath); Console.WriteLine($"[{nameof(EXIT_CODE_OK)}]"); return(EXIT_CODE_OK); }