關於對長路徑的支持

廢話不多說了,µTorrent支持長路徑,NTFS也支持長路徑,但是WINDOWS API卻還是遵循以前的規則,不支持超過260字符的路徑,至於帶來的問題之前提過,這裡不再重複了。

下面給了一個鏈接,介紹了如何解決長路徑的支持問題,希望相關技術人員看了有所啟發,改進BC內核。

http://www.ibm.com/developerworks/cn/java/j-lo-longpath.html

獲取8.3路徑名的API函數
DWORD WINAPI GetShortPathName(
__in LPCTSTR lpszLongPath,
__out LPTSTR lpszShortPath,
__in DWORD cchBuffer
);

我自己測試了下,其實也可以自己寫轉換函數,原則很簡單,先找到文件最後的小數點,沒有則沒有擴展名,不論是目錄還是文件,都可以有擴展名:L。

小數點前面取6位,然後加~1、~2之類的編號,只不過遇到前面6位重複情況很多的時候,這個編號就不清楚系統自動分配給哪個文件了,這時只有調用GetShortPathName函數了。擴展名部分的話,只要截取前三位即可,非常容易。

-----------------------我是水平分割線---------------------------

雖然長路徑在Windows下不能直接訪問,以至於視頻無法直接播放,但是如果播放器傳遞的視頻文件使用8.3格式的短命名,就可以正常打開了。所以建議BC在處理長路徑支持的同時,為每個長路徑下需要預覽(播放)的視頻文件添加對應的8.3命名路徑,這樣在使用BC內置的播放功能時,傳遞給播放器8.3命名的短路徑,即可讓播放器順利播放該視頻文件了。

偶很懷疑現在做BC代碼的還是不是原來的那伙,感覺編碼水平下降了很多:L

謝謝支持,已經排入計劃。


1.21正式版已經支持長路徑。