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)
現在のスレッドがコンテキストを切り替え、他のスレッドのバッファを同期する機能 (ハードドライブへの書き込み) を可能にする呼び出しを挿入しない限りです。
前に説明した方法で QProcess を使用して開始しない限り、同じファイルを使用して cmd ラインから Exiftool を実行すると、常にメタデータが読み取られます。何が問題になる可能性がありますか?