Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Общие вопросы > получение файлов с фотоаппарата по USB


Автор: vovan123 30.10.16, 15:22
Добрый день, утро, вечер, ночь.
Не один день искал решение проблемы в инете, но так и не нашел (((
Имеется написанная на delphi6 программа, которая определяет подключение цифрового фотика и далее сортирует и копирует файлы на комп. пришло время заменить фотик, и тут возникла проблема. Ранее фотики никон подключались в компу как диск, а теперь как устройство, и программно копировать файлы с устройства как ранее не получается.
Кто нить может чего подсказать ????

Автор: VisualProg 31.10.16, 13:10
1. Что именно не получается? Нет драйвера, или же у фотоаппарата теперь свой софт для загрузки/закачки мультимедиа?
2. Распознаётся ли это устройство Explorer-ом виндовса? Если да, что мешает проследовать по этому пути?

Автор: vovan123 31.10.16, 13:49
ранее для переноса файлов с фотика использовал функцию DoSHFileOp, сейчас не работает.

повторяю фотик подключается не как диск а как мультимедиа устройство, путь в проводнике ничего не дает

Автор: VisualProg 31.10.16, 14:24
Цитата vovan123 @
ранее для переноса файлов с фотика использовал функцию DoSHFileOp

Цитата vovan123 @
повторяю фотик подключается не как диск

Ну, если раньше Explorer успешно копировал, а сейчас нет, может и принцип чтения/записи изменился? Вы так и не объяснили, каким образом копирует файлы Explorer и копирует ли он их теперь вообще?

Додумать что то за Вас здесь не смогут. Постарайтесь подробнее раскрыть тему.

Автор: vovan123 31.10.16, 15:00
Цитата VisualProg @
Цитата vovan123 @
ранее для переноса файлов с фотика использовал функцию DoSHFileOp

Цитата vovan123 @
повторяю фотик подключается не как диск

Ну, если раньше Explorer успешно копировал, а сейчас нет, может и принцип чтения/записи изменился? Вы так и не объяснили, каким образом копирует файлы Explorer и копирует ли он их теперь вообще?

Додумать что то за Вас здесь не смогут. Постарайтесь подробнее раскрыть тему.

я не знаю как Explorer копирует файлы, это нужно у била гейца спросить. Я копирую с помощью функции DoSHFileOp. Поменялся фотоаппарат, если ранее он подключался как диск и проблем не было, то теперь подключается как мультимедиа устройство. При подключении фотика автоматом запускается прога получения данных со сканера или цифрового фотика. Теоретически предполагаю что копать нужно в сторону TWAIN, просто кто сталкивался с данной проблемой сможет помочь ???

Автор: vovan123 31.10.16, 15:08
VisualProg

что бы было понятно вот кусок кода (E:\DCIM\100NIKON\) - это путь к старому фотику. У нового фотика пути к диску нет, потому что нет диска, а есть устройство, путь до устройства не подходит

// begin //******************** удаление файлов и папок
FDes :='D:\0_KO_GRAF\'+IntToStr(CustomerData.IBTable2.Fields[0].AsInteger)+'\'
+CustomerData.IBTable2.Fields[2].AsString+'\'; // указали новый путь
FSrc:='';
if FindFirst('E:\DCIM\100NIKON\*.*',faAnyFile,SR)=0 then //ищем все файлы
repeat
if ExtractFileExt(SR.Name)='.JPG' then //проверка есть ли файл
begin //// копируем если есть
FSrc:=FSrc+'E:\DCIM\100NIKON\'+SR.Name+#0; //пишем путь
begin //если не нашли добавить

CustomerData.IBTable3.Insert;
CustomerData.IBTable3.Fields[0].AsInteger:=CustomerData.IBTable1.Fields[0].AsInteger;
CustomerData.IBTable3.Fields[1].AsDateTime:=CustomerData.IBTable2.Fields[2].AsDateTime;
CustomerData.IBTable3.Fields[3].AsString:=SR.Name;
CustomerData.IBTable3.Post; //запись в таблицу
end;
end; /// закончили копирование
until FindNext(SR)<>0;
FSrc:=FSrc+#0;
FindClose(SR); //очистка памяти
DoSHFileOp(Handle, FileOpMode[2], FSrc, FDes, false); //2-перенос 0-без удаления
//*********** Копирование файлов и вставка строк в Таб3 закончить
/////////--------------закончили удаление-------------------////////////

Автор: Jiro 31.10.16, 18:44
vovan123
Тебя конкретно спрашивают, Explorer файлы копирует или нет? какой нах гейтс ... :lol: .

Автор: vovan123 31.10.16, 20:27
Цитата Jiro @
vovan123
Тебя конкретно спрашивают, Explorer файлы копирует или нет? какой нах гейтс ... :lol: .

конкретно спрашивали (Вы так и не объяснили, каким образом копирует файлы Explorer)
да Explorer естественно копирует файлы, что это дает???? Explorer обращается к файлам не просто а посредством TWAIN или MTP, в этом и состоит вопрос как это в дельфи реализовать. MTP менее желательно так как прога стоит на XP а там изначально нет библиотеки PortableDeviceApi.dll

Автор: VisualProg 01.11.16, 06:33
Цитата vovan123 @
да Explorer естественно копирует файлы, что это дает????

Это говорит о том, что Shell имеет представление как именно производить копирование. Так же, это говорит о том, что любые функции explorer-а, выполнить которые у вас получается в проводнике - должны работать в ShellAPI этого проводника.

Поэтому и не понятно, какое исключение вываливает DoSHFileOp?

Цитата vovan123 @
У нового фотика пути к диску нет

Но, это не значит что нет протокола по которому можно получить доступ к файлам. Успешное копирование через Explorer именно это и говорит.

Цитата
Теоретически предполагаю что копать нужно в сторону TWAIN

Скажу проще, если проводник знает как делать то что вам нужно - не надо писать костыли и велосипедить то же что уже реализованно в проводнике. У него есть вполне исчерпывающее API.

И пожалуйста, форматируйте код в соответствии с правилами, в таком виде его тяжело читать

Автор: vovan123 01.11.16, 11:26
Цитата VisualProg @

Это говорит о том, что Shell имеет представление как именно производить копирование. Так же, это говорит о том, что любые функции explorer-а, выполнить которые у вас получается в проводнике - должны работать в ShellAPI этого проводника.
Поэтому и не понятно, какое исключение вываливает DoSHFileOp?
Но, это не значит что нет протокола по которому можно получить доступ к файлам. Успешное копирование через Explorer именно это и говорит.
Скажу проще, если проводник знает как делать то что вам нужно - не надо писать костыли и велосипедить то же что уже реализованно в проводнике. У него есть вполне исчерпывающее API.

И пожайлуста, форматируйте код в соответствии с правилами, в таком виде его тяжело читать

думаю вы неправы, не все так просто и однозначно
предполагаю проводник получает доступ к устройству через какую то библиотеку, протокол. Он преобразует файлы с устройства в свой под ShellAPI вид.
То есть я из своей программы, не могу использовать ShellAPI, функции не работают.
Что бы вы поняли о чем я, грубо есть некий условно архив, что бы работать с файлами его нужно разжать, проводник в автомате разжимает архив и вы манипулируете файлами. В программе вы не можете так как проводник манипулировать файлами, потому что они за архивированы, изначально нуна разжать их.(может по аналогии поймете, что не все так просто и однозначно)
лучше бы конечно что я ошибался, тогда подскажите как сделать

Автор: Jiro 01.11.16, 15:25
vovan123
Может это уже испытывалось но всё же скажу, что быть может нужны права админа софтине для копирования.
А так повторю что было сказано выше, нужно узнать код отказа при выполнении копирования.

Автор: vovan123 01.11.16, 20:06
Цитата Jiro @
vovan123
Может это уже испытывалось но всё же скажу, что быть может нужны права админа софтине для копирования.
А так повторю что было сказано выше, нужно узнать код отказа при выполнении копирования.

Какие права админа ))) на что. Повторю свой первый пост, имеем компьютер, WinXP, софтина, потключаю по USB старый фотик, копирует с него фотки на комп, подключаю новый фотик не копирует. И какие права админа на фотик нужно, ибо меняется только фотик )))
ПРО код отказа
копирую функцией DoSHFileOp , на старом фотике путь выгладит как путь к диску конкретно E:\DCIM\100NIKON\, также функцией FindFirst('E:\DCIM\100NIKON\*.*',faAnyFile,SR) ищу названия файлов так же по конкретному пути диска.
Новый фотик подключается не как диск а как устройство, скажите какой путь писать, и я вам скажу какая ошибка будет....

Автор: Jiro 02.11.16, 00:25
vovan123
В первом посте ни слова про XP, так что это новая информация. права админа это конечно уже из серии win7+

А другие файловые мэнэджеры пробовались ?

Есть мысля хотя наврятли, но всё же а вдруг
что если задать путь так: '\\.\PHYSICALDRIVE#' где # - порядковый номер диска. Или так '\\.\E:'

Автор: vovan123 02.11.16, 07:22
Jiro
MTP (Media Transfer Protocol) — это аппаратно независимый протокол, разработанный компанией Microsoft для подключения цифровых плееров к компьютеру.
В операционной системе Windows MTP не является файловой системой, а поддерживается на уровне прикладного ПО, поэтому воспользоваться «любимым файловым менеджером» не получится, файлы можно записывать только через Проводник и Windows Media Player.
Это не самый лучший протокол обмена данными между компьютером и смартфоном, но, к сожалению, приходится им пользоваться на устройствах где не реализован режим USB накопителя Mass Storage.

ключевое слово из всего написанного, не является файловой системой.

PS Jiro, нету диска подключается в проводнике как устройство а не диск

Автор: Jiro 02.11.16, 10:03
vovan123
понятно, тогда Google>Delphi MTP ...
Вроде то что нужно см. аттач mtp10.zip (, : 145)

Автор: vovan123 03.11.16, 07:08
Цитата Jiro @
vovan123
понятно, тогда Google>Delphi MTP ...
Вроде то что нужно см. аттач mtp10.zip (, : 145)

большое спасибо, то что нужно для начала, чтобы начать ломать голову

Автор: vovan123 07.11.16, 19:27
Цитата Jiro @
vovan123
понятно, тогда Google>Delphi MTP ...
Вроде то что нужно см. аттач mtp10.zip (, : 145)


Jiro, напиши где ты нашел этот исходник ??? все ок и здорово в коде разобрался, НО это прокатывает только на 7ке на XP не работает, чего только не делал и паки всякие MTP ставил и файлы .inf коректировал, и 11 плеер поставил, ничего не помогает, может там есть как это на XP запустить.

Автор: Jiro 08.11.16, 04:37
vovan123
https://www.experts-exchange.com/questions/...ith-Delphi.html

Автор: Jiro 19.03.19, 05:26
Кстати если что есть платный компоненто Portable от winsoft
https://www.winsoft.sk/portable.htm


Delphi library to communicate with attached media and storage devices. Applications can explore devices, send and receive content, and even control devices.

uses standard Windows Portable Devices API
supports Media Transport Protocol (MTP) and Mass Storage Class (MSC) devices
supports Windows 32 and Windows 64
available for Delphi/C++ Builder 5 - 10.3
source code included in registered version
distributing library in applications is royalty free


кряк к нему свободно распространяется по этим вашим интернетам.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)