我目前正在开发一个mac应用程序,将文件从mac传输到mtp设备,如usb。
我使用下面的代码来添加它:
LIBMTP_file_t *genfile;
char *AbsolutePath = NULL;
char *FileNameOnly = NULL;
QFileInfo fileInfo(filename);
FileNameOnly = convertQStr2char(fileInfo.fileName());
AbsolutePath = convertQStr2char(fileInfo.absoluteFilePath());
genfile = LIBMTP_new_file_t();
genfile->filesize = filesize;
genfile->filename = FileNameOnly;
genfile->filetype = file_type;
genfile->parent_id = CurrentFolderID;
genfile->storage_id = PulsDeviceMngr->devicestorage->id;
if ((genfile->filetype != LIBMTP_FILETYPE_ALBUM) && (genfile->filetype != LIBMTP_FILETYPE_PLAYLIST)) {
ret = LIBMTP_Send_File_From_File(PulsDeviceMngr->device, AbsolutePath, genfile, ProgressBar, NULL);
if (ret != 0) {
qDebug() << "Error sending file";
LIBMTP_Dump_Errorstack(PulsDeviceMngr->device);
LIBMTP_Clear_Errorstack(PulsDeviceMngr->device);
} else {
PulsDeviceMngr->devicestorage->FreeSpaceInBytes -= filesize;
PulsDeviceMngr->devicestorage->FreeSpaceInObjects--;
}
}
LIBMTP_destroy_file_t(genfile);
这基本上是 mtp 使其工作所需的。
我正在使用 QT/C++ 来开发软件。
似乎 QString 没有受到影响,而只有 char 。需要char,因为使用的 api 仅支持 char 。我正在使用以下代码将 QString 转换为 char 。
char *mtp_wrapper::convertQStr2char(QString str) {
QByteArray latin_str = str.toLatin1();
char *return_str = latin_str.data();
return return_str;
}
我在发布 genfile 时遇到问题??似乎运行时认为我无法释放未分配的指针,但我使用以下行来执行此操作:
genfile = LIBMTP_new_file_t(); LIBMTP_destroy_file_t(genfile);
没有先决条件。当 genfile 发生时,销毁发生了。在 genfile 上分配了一些数据。
- 我现在可以打开 PTP stat 的文件,抱怨我无法发送对象
任何想法 ?