示例#1
0
        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();
        }
示例#2
0
        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);
        }