Ответ 1
Справочник по программированию приложений WPD ссылается на 3 ИМЯ.
WPD_OBJECT_HINT_LOCATION_DISPLAY_NAME: более дружелюбное имя, в основном предназначенное для отображения
WPD_OBJECT_NAME: имя объекта на устройстве.
WPD_OBJECT_ORIGINAL_FILE_NAME: исходное имя файла на устройстве.
Пример кода MS в С++ использует WPD_OBJECT_ORIGINAL_FILE_NAME для доступа к фактическому имени файла (под объектом) при передаче файлов с устройства на ПК.
Я изменил образец кода MS (для перечисления свойств объекта), и он показал мне фактическое имя файла (ничто не урезано из имени файла com.ef1.first.second
)
Я использовал:
Windows Windows 7 Ultimate (without SP1) Visual Studio 2013 Android 4.4.4 (Moto-E) Connection type: MTP Memory type: Internal Memory as well as External (SD Card)
Я не удивлюсь, если это не сработает с некоторыми версиями Windows, версиями Windows SDK, версиями Android, типами подключения (MTP, PTP, USB Mass Storage).
Вот часть кода, которую я модифицировал (и вот как это работает).
// Reads properties for the user specified object.
void ReadContentProperties(_In_ IPortableDevice* device)
{
//.... Edited for brevity
tempHr = propertiesToRead->Add(WPD_OBJECT_NAME);
if (FAILED(tempHr))
{
wprintf(L"! Failed to add WPD_OBJECT_NAME to IPortableDeviceKeyCollection, hr= 0x%lx\n", tempHr);
}
// Here is the added code
tempHr = propertiesToRead->Add(WPD_OBJECT_ORIGINAL_FILE_NAME);
if (FAILED(tempHr))
{
wprintf(L"! Failed to add WPD_OBJECT_ORIGINAL_FILE_NAME to IPortableDeviceKeyCollection, hr= 0x%lx\n", tempHr);
}
//.... Edited for brevity
}