看板 C_Sharp 關於我們 聯絡資訊
我是寫C#去get 全部檔案,然後印在listbox 上面,但是會有個問題。 我資料夾檔案排序是這樣子 A指的是任意字串 1A 5A 10A 100A 150A 160A 180A ... 數字小的會在前面 然而自己做的會這樣 100A 150A 160A 180A 10A 1A 5A... listbox會印出這樣 請問要如何修正才會像我自己資料夾看到的排序? 像是1,排在最前面,但是只擷取第一數字做排列,在擷取第二數字做排列 我想要的就是像是先從全部數字看成一組做排序,請問要怎麼用? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.193.134 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1596983653.A.70E.html
Nilife: 你確定資料夾是按名稱排序嗎? 08/10 17:40
Nilife: 這種需求應該是要先切文字,轉數字,再遞增排序 08/10 17:42
Nilife: 或是從別的條件比如最後寫入時間 08/10 17:42
DeathTemp: 把抓到的每個檔名前面補零補滿到跟最長檔名一樣長 08/10 18:04
DeathTemp: 之後再開始排序 08/10 18:04
https://0rz.tw/6yMbt 資料夾上 12/1 是顯示第一個! 可是我開頭就是顯示12/10。 所以很好奇要怎樣才能用得像資料夾那樣排序。 tempFile = Directory.GetFiles(DirectoryPath); 我是這樣子取得資料夾所有檔案的。 ※ 編輯: ChenRobert (1.34.193.134 臺灣), 08/10/2020 21:01:51
kobe8112: 自己依照需求排完再放到listbox上吧 08/10 22:38
Litfal: Windows檔案總管排序有做特別處理,建議自己寫算法排,或 08/11 19:53
Litfal: www.pinvoke.net/default.aspx/shlwapi.strcmplogicalw 08/11 19:56
Litfal: 用這個排,只是pinvoke對你來說可能不會比較簡單 08/11 19:57
name2name2: 自己寫算法可以例如List物件的類加一個屬性 08/12 20:50
name2name2: 那個屬性把原本的檔名去掉txt的日期文字轉成DateTime 08/12 20:51
name2name2: DateTime屬性就可以用OrderBy了 08/12 20:52
name2name2: 或者直接在OrderBy的時候轉換例如 08/12 20:53
name2name2: listSource.OrderBy(obj => Convert.ToDateTime(obj.F 08/12 20:54
name2name2: ileName.Repalce(".txt","")); 08/12 20:55
awwseed: orderby ascii 看看? 08/12 21:55
ChenRobert: 感謝,處理好了 08/12 22:02
ChenRobert: pinvoke好用 08/12 22:02
awwseed: https://i.imgur.com/ZUlM9pS.png 08/12 22:10