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

Когда камера подключена к компьютеру с помощью USB-кабеля, она отображается в папке «Этот компьютер». Но «Этот компьютер» - это не обычная папка, а специальная папка, которая не отображается ни при каком обычном пути. 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 # копирует все изображения и видео на жесткий диск компьютера, а затем открывает «проводник Windows» в папку назначения на жестком диске. Прямой доступ к SD-карте (извлечение ее из камеры) не возможен, поскольку у моего друга есть физические ограничения, которые этому препятствуют.

1
Mark T 30 Апр 2020 в 23:43

2 ответа

Лучший ответ

Используя этот скрипт и пакет 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.

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

1
Niklas Jensen 30 Апр 2020 в 22:07

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

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

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

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

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

1
Christopher 30 Апр 2020 в 20:57