0

Itunes ライブラリ (正確には 844) に重複した曲がいくつかあるので、重複を見つけて破棄する小さなプログラムを作成しようと考えました。私が遭遇した問題は、ディレクトリの一部が正しく読み取られていないことです。

たとえば、アルバムのフォルダ名の 1 つが「Greatest Hits, Vol. 2」ですが、「Greatest Hits, Vol.」と読みます。

明らかに「。」問題を引き起こしています。完全なファイル パス名 (ピリオド付き) を読み取ることができる回避策を知っている人はいますか?

コードの小さな断片

QString name;
int id;
    for (int a = 0; a < dir.entryList(QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot).length(); ++a)
        {
            name =  path() + "/" + baseName() + "/" + dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot).at(a);
            subFiles.append(new CKClone(id, path() + "/" + baseName() + "/" + dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot).at(a), this));

            // Updating the ID number to account for descendants.
            id = subFiles.last()->countDescendants(id);
        }

上記のコードは小さなスニピットにすぎず、明らかにそれだけで多くのことを行うわけではありません。すべてのファイルとディレクトリを再帰的に読み取るだけです。

どんな助けでも感謝します、ありがとう

ジェック

4

1 に答える 1

1

実際に PyQt でこれをテストしたところ、問題は発生しないことがわかりました。これは Qt 4.8 を使用してテストされているため、お使いのバージョンに固有の問題かどうかを確認することをお勧めします。

次のようなディレクトリ構造:

testing/
    a path with spaces/
    patH_with_no_spaces/
    path with version, vol. 2/

テスト スニペット

from PyQt4 import QtCore

d = QtCore.QDir("testing")
list(d.entryList(d.AllEntries|d.NoDotAndDotDot))

# output
[
    PyQt4.QtCore.QString(u'a path with spaces'), 
    PyQt4.QtCore.QString(u'path with version, vol. 2'), 
    PyQt4.QtCore.QString(u'patH_with_no_spaces')
]

コードのバグかどうかを確認するために、最初にコードをもう少し単純化してみてください。ループ、文字列の作成、追加のたびにリストを再生成しているようです。その呼び出しの QStringList 結果をentryListループの前に一度保存し、残りのコードに同じオブジェクトを使用してみてください。

于 2012-04-08T21:35:01.800 に答える