共用方式為


排序的發展機密的視窗:

在 Windows 檔案總管中開發排序演算法的歷史既漫長又有點坎坷。

Raymond Chen

Windows 檔案總管啟動非常簡單的排序演算法。 它只被排序依據的"lstrcmpi"函式來的檔案名稱。 這項執行地區設定特性,不區分大小寫的比較。 提醒您,即使這個比較函式是相當複雜時。 比方說,它會提供特殊處理連字號和單引號。

如此一來,當 Windows 95 排序顯示在 [Windows 檔案總管] 中的檔案名稱,會讓超前於 file20 的 file139。 這是完全符合邏輯的電腦程式設計師的觀點。 它也是完全不太正常人類的經濟 — 因此證明電腦程式設計人員不一般的人類。

在 Windows XP 中,Microsoft 會更新為與正常人類預期排列多個 Windows 檔案總管] 排序演算法。 則視為數字中的檔案名稱而不是序列中的數字的字元。 雖然這可以改善排序對大多數人來說,沒有這項變更會導致一些意外的情況。

以常用的其中一個範例是包含十六進位值的檔案名稱。 在新數字為基礎排序,Windows 檔案總管] 會假設名為"1040A"的檔案應該稍微排在 「 1040,",事實的檔名為"103F2"。如果基於任何原因是在 [檢視資料夾的完整檔案名稱是十六進位值的習慣,您可以設定原則 」 將關閉 Windows 檔案總管] 中的數字排序 」。此原則是以 Windows XP 之前的 Windows 版本中的方式變更排序後,也就是字元的字元。

句點及空格

在 Windows Vista 中,沒有小調整,而比較演算法,進行因為期間是雙方面同時。 它們是傳統的字元按日顯示,但它們也是晚上檔案副檔名的標記。 因此,名為檔案 1.txt 的檔案最後 counter-intuitively 排序後 File.txt 因為期間比較空間及遺失資料。

Microsoft Windows Vista 中的排序演算法來加入新的規則,因此期間會被視為後加以排序之前空格而不使用。 如果您不喜歡這個 sub-rule,您可以藉由設定 NoDotBreakInLogicalCompare,但只能在 Windows Vista 中停用。 設定並不會影響 Windows 7。

另一個,較不奇怪的情況中字元的字元排序可能會比: 如果有浮點數數字的檔案名稱。 數字為基礎的排序演算法會將 「 1.5 「 超前"1.25 」。這是正確如果 「 1.5"和"1.25"參考編號的階層架構,例如合法的程式碼區段。 標題 1,第 5 章會放在標題 1,第 25 章之前。

相反地,如果 「 1.5"和"1.25"參考電腦組件以公分為單位的維度,然後您又期望"1.25 」 要早於 「 1.5 」。因為 Windows 檔案總管] 中沒有足夠的內容,瞭解是否有任何特定的字串的數字的小數點後的階層式的數字或浮點數,它需要您幫助。

在 Windows 7 中引進排序演算法更細微的變更。 一位客戶發現是否他有兩個檔案,例如 file1.txt 和 file2.txt,標示的項目檔案出現的順序是否他排序的型別,這是預期的行為的資料夾。

如果他按了型別標頭来反向排序,較早版本 Windows 的第二次仍會繼續將超前於 file2.txt 的 file1.txt。 不過,檔案會 file2.txt file1.txt 超前下來搭配參數在 Windows 7 的位置。 此行為變更混淆客戶,是因為看 「 不合理的 」。

[類型] 欄,瞭解它是很常見的許多項目具有相同的型別,因此它表示繫結應該要分成依項目的名稱。 除了建立更一致的型別排序,這也表示當您反轉排序順序,每個型別中的項目也反向順序。 這是合理的行為,對許多使用者而言,因為預期切換欄會反轉項目集合。

因此的下次執行排序,請記住排序簡單又直接的聲音,時有很多在幕後進行..

Raymond Chen’s

現在人人存取許可權 Web 站台,新舊項目,並處理 Windows 歷程記錄,Win32 程式設計和巨人金屬 chickens 的相同標題為的活頁簿 (Addison-Wesley,2007年)。

相關內容