0

glib を使用して、2 つのファイルパスが同等であることを確認する必要があります。リダクションパスを介して、ずっと前にQtでそれを行いました。しかし、glib で同様の楽器を見つけることができません。誰かがこれを行う一般的な方法を提案できますか?

ありがとう

4

1 に答える 1

1

.との使用を解決する「単純な」正規化のために、 GIO API の関数を使用して 2 つのオブジェクトを..作成するだけです。次に、 を使用して 2 つのファイルを比較します。GFileg_file_new_for_path()g_file_equal()

GFileこれは、オブジェクトの作成時にパスの単純な正規化を行う GIO に依存していることに注意してください。シンボリック リンクは解決されません。ドキュメントには次のように記載されています。

識別子としての使用GFileには、同じファイルに複数のエイリアスが存在する可能性があるという点で、パスの使用と同じ弱点があります。たとえば、ハード リンクまたはソフト リンクによって、2 つGFileの異なる が同じファイルを参照する場合があります。エイリアスのその他の原因としては、大文字と小文字を区別しないファイル システム、FAT/NTFS での短い名前と長い名前、または Linux でのバインド マウントがあります。GFile2 つの が同じファイルを指しているかどうかを確認したい場合は、G_FILE_ATTRIBUTE_ID_FILE属性を照会できます。GFileは、渡されたパス名の些細な正規化を行うため、作成時に使用されるパス文字列の些細な違い (スラッシュの重複、パスの末尾のスラッシュ、「.」または「..」パス セグメントなど) によって異なるGFilesが作成されないことに注意してください。 .

したがって、次の 2 段階のアプローチを実行できます。

  1. で確認してくださいg_file_equal()。と表示されたらtrue完了です。
  2. それ以外の場合は、属性を照会してG_FILE_ATTRIBUTE_ID_FILE比較します。
于 2013-08-21T09:54:29.667 に答える