我使用Exiftool 10.10 +,Qt 5.5.1和Windows 10遇到了一些有趣的问题。
我正在使用QTemporaryFile创建临时文件,写入一些数据,保存,等待直到它使用FlushFileBuffers()
刷新,然后将此文件作为exiftool
的参数文件传递。我在那里写的数据是UTF-8编码的图像路径:
QTemporaryFile argumentsFile;
if (argumentsFile.open()) {
QStringList exiftoolArguments = createArgumentsList();
foreach (const QString &line, exiftoolArguments) {
argumentsFile.write(line.toUtf8());
argumentsFile.write("\r\n");
}
}
argumentsFile.flush()
// fsync stuff here...
argumentsFile.close()
// starting exiftool with -@ argumentsFile.fileName() parameter here
// also with -charset filename=UTF8
所以问题如下:当文件名不包含Unicode符号时,Exiftool会读取图像,导入Exif元数据,一切都很好。
但是当文件名包含Unicode符号时,有时Exiftool不会追赶它们,除非我将插入QThread::sleep(msec)
调用,这将使当前线程切换上下文并且可能为其他线程提供同步缓冲区的能力(写入硬盘驱动器) )。
从具有相同文件的cmd行运行的Exiftool始终读取元数据,除非以前面解释的方式使用QProcess启动。可能是什么问题?