2010-03-10 68 views
1

我怎樣才能得到與windows文件系統相同的文件序列?因爲有太多的文件系統排序項目:名稱,大小,上次修改日期時間,標記(贏7),評級(贏7),所以如果我使用CFileFind API來模擬排序行爲,因爲Windows文件系統是非常困難的。那麼如何才能得到序列與Windows文件系統相同的文件?關於windows系統排序問題的問題

回答

0

我不確定CFindFile是做什麼的,但FindFirstFile和朋友以它們在NTFS目錄中存在的順序返回文件。

我不知道爲什麼,這將是最可取的,但是,這不是任何人的定義正是「直覺」 ......

+0

CFindFile方法類似於FindFirstFile,它們都是按字母排序的。有人建議我使用IShellFolder API,是否有人熟悉IShellFolder方法? – user290305

+0

哦,我不明白你的問題......我以爲你想按照文件系統順序排序文件,而不是按照瀏覽器使用的順序。資源管理器使用*大致*與StrCmpLogicalW相同的順序,所以你可以使用它來排序文件名。 –

+0

Emm,我想要檢索與瀏覽器相同的文件序列,而不是文件系統順序。但是瀏覽器中的文件序列是由用戶根據文件大小,上次修改日期時間等設計的,並且在瀏覽器中有很多排序標準,所以我無法模擬探索文件排序。所以僅將文件排序爲StrCmpLogicalW是不夠的。 – user290305

0

雷蒙德陳做了"Why do NTFS and Explorer disagree on filename sorting?"

一個相當詳細的文章。然而,請注意0​​及其親屬實際上沒有對結果進行排序 - 只是將文件以文件系統交給他人的順序傳回給您。 NTFS爲了自己的目的有一個排序(我不確定那個排序是否被指定 - 它看起來對你而言可能只是一個快樂的巧合)。 FAT文件系統和網絡文件系統將會有自己的順序(或者沒有順序 - 這些文件可能只是以它們碰巧創建的順序存在於目錄中 - 我認爲FAT系統就是這樣)。

如果您需要由FindFirstFile()和朋友返回的文件的特定訂單,您需要自行排序。

FindFirstFile() docs:「FindFirstFile不對搜索結果進行排序,有關其他信息,請參閱FindNextFile。」

並從docs for FindNextFile():「搜索返回文件的順序,如字母順序,不能保證,並且依賴於文件系統。如果數據必須排序,應用程序必須執行排序獲得所有結果後「。

CFileFind()對返回的文件名的順序沒有任何承諾 - 如果它進行了任何排序,我會感到驚訝(因爲它必須在返回第一個文件之前從目標目錄中獲取所有可能的文件以便能夠把它拉開)。

+0

嗯,我想檢索與瀏覽器相同的文件序列,但資源管理器中的文件序列由用戶在文件大小,上次修改日期時間等設計,並且在瀏覽器中有許多排序標準,所以我不能模擬探索文件排序。那麼是否有任何方法來獲取文件序列作爲探索? – user290305