1

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 を実行すると、常にメタデータが読み取られます。何が問題になる可能性がありますか?

4

0 に答える 0