我在使用 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 以前面解释的方式启动。可能是什么问题?