Как найти камеру, подключенную через USB-кабель, используя C#, чтобы потом можно было копировать сохраненные изображения - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу подключить камеру к компьютеру с помощью USB-кабеля и скопировать изображения с SD-карты камеры на компьютер. Я не могу найти изображения. Я хотел бы обнаружить любую камеру, не только Canon ... но мне нужно сначала решить Canon. (Извлечение SD-карты из камеры - , а не - приемлемое решение.)

Когда камера подключена к компьютеру с помощью USB-кабеля, она отображается под надписью «This P *». 1014 * "папка. Но «This P C» - это не обычная папка, а специальная папка, которая не отображается ни при каком обычном пути. Windows очевидно использует ":: {20D04FE0-3AEA-1069-A2D8-08002B30309D}" для внутреннего доступа к нему, но я не могу найти способ использовать это в C#. Переменная окружения, которая указывает на это, возвращает "" и задокументирована как таковая. Я попытался перечислить все диски с помощью DriveInfo.GetDrives (). Но камера не отображается ... по-видимому, это всего лишь устройство, а не накопитель (хотя при нажатии на нее открывается вид на папку).

Единственные ссылки, которые я могу найти для доступа к Canon для всех изображений с камеры используется Canon SDK, который работает только с камерами модели EOS для обеспечения полного дистанционного управления.

ОБОРУДОВАНИЕ: Использование Visual Studio 2019, C#, Windows 10 Pro и камеры Canon PowerShot SX700 HS

ЦЕЛЬ: Я пытаюсь сделать программа для пожилого друга, чтобы он мог легко загружать фотографии на свой компьютер. Он знает, как подключить камеру с помощью USB-кабеля, но открывает папки, копирует, перетаскивает и т. Д. c. смущает его. Это должно быть все автоматическое c ... приложение камеры и программа C# копирует все фотографии и видео на жесткий диск компьютера, а затем открывает «windows explorer» в папку назначения на жестком диске. Непосредственный доступ к SD-карте (извлечение ее из камеры) не возможен, поскольку у моего друга есть физические ограничения, которые этому препятствуют.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Используя этот скрипт и пакет nuget «MediaDevices» от «Ralf Beckers», вы можете скопировать все файлы с вашей камеры, как показано ниже. Просто убедитесь, что изменили такие вещи, как «ИМЯ УСТРОЙСТВА», @ «\ Internal Storage \» и расположение моего рабочего стола :) »: ​​

using System.IO;
using MediaDevices;

private void button3_Click(object sender, EventArgs e)
        {
            var devices = MediaDevice.GetDevices();
            foreach(var device in devices)
            {
                MessageBox.Show(device.FriendlyName);
                if (device.FriendlyName == "DEVICE NAME")
                {
                    device.Connect();

                    var drs = device.GetFiles(@"\Internal Storage\");
                    foreach (string str in drs)
                    {
                        MessageBox.Show(str);
                        MemoryStream memoryStream = new System.IO.MemoryStream();
                        device.DownloadFile(str, memoryStream);
                        memoryStream.Position = 0;
                        WriteStreamToDisk(@"C:\Users\nikla\Desktop\temp\" + str.Substring(str.LastIndexOf("\\") + 1), memoryStream);
                    }

                }
            }

        }

        static void WriteStreamToDisk(string filePath, MemoryStream memoryStream)
        {
            using (FileStream file = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.Write))
            {
                byte[] bytes = new byte[memoryStream.Length];
                memoryStream.Read(bytes, 0, (int)memoryStream.Length);
                file.Write(bytes, 0, bytes.Length);
                memoryStream.Close();
            }
        }

Вы можете индексировать больше файлов с помощью device.GetDirectories(@"\Internal Storage\") и запускать через их с foreach l oop.

Благодарю "@ZackOfAllTrades" за привлечение этого пакета nuget к моему вниманию

1 голос
/ 30 апреля 2020

При подключении камеры (или смартфона) к компьютеру возможны два исхода:

  1. Камера работает как USB-накопитель или другое запоминающее устройство. Это идеальный случай.
  2. Камера не работает как флешка. Это означает, что вам нужна специальная программа от производителя для доступа к изображениям.

Если это случай 1, он действительно работает как любая USB-флешка.

Если это случай 2, то программа является единственным способом. Вы привязаны к точно , что он предлагает.

Лично я бы никогда не купил камеру, которая подходит к случаю 2. Хотя я могу оценить идею о том, что обычным пользователям не нужно удалять папки, которые им следует не взаимодействовать с, потребность в специальной программе на самом деле очень хлопотно.

...