2010-07-12 52 views
3

我正在尋找一個函數,它可以爲給定的'long'路徑返回'short'(8.3符號)路徑。然而,GetShortPathName函數(這看起來像一個完美的適合)不適合我,因爲它需要一個具有給定長路徑的文件已經存在。什麼是GetShortPathName函數的替代方法?

我有什麼其他選擇來計算給定長路徑的8.3路徑?

+4

簡稱*取決於*。注意文件名末尾的那些〜1,〜2?假設你有兩個文件'notsoshortfilename.txt'和'notsoshortfile.txt',其中一個將被命名爲'notsos〜1.txt',另一個'notsos〜2.txt'。哪一個得到哪個名字?它取決於創建文件時生成哪些名稱以及生成短名稱。 – jalf 2010-07-12 11:25:12

+0

@jalf:這就是我收集的。我認爲這個算法檢查給定目錄中的文件列表,然後計算一個新的8.3文件名稱,該文件名稱不會與任何現有名稱衝突,可以在專用函數中使用。特別是,在不需要由給定路徑標識的文件已經存在的功能中。 – 2010-07-12 12:13:06

+3

問題是,這樣的功能本質上是活潑的。您不能保證在調用函數的程序和使用結果之間不會使用特定的短名稱。 – caf 2010-07-13 04:13:04

回答

10

如果文件不存在,它沒有8.3名稱。 8.3名稱是在創建文件時創建的。如果您需要,您當然可以在目錄上使用GetShortPathName目錄中的8.3路徑名。

無論如何,這是2010年。它真的倒退到使用8.3名稱任何東西

+3

我實際上使用GetShortPathName將unicode路徑名傳遞給在UTF-16上爆炸的舊庫,它仍然是向後的,但它顯示仍有用處。 – 2010-07-24 17:49:34

2

嘗試PathGetShortPath函數。

+0

+1這有額外的好處,不需要存在路徑來獲得DOS路徑。請注意:PathGetShortPath適用於寬字符或utf16字符串,因此如果您使用utf8/ascii字符串,則需要進行編碼然後解碼。由於我從C#中調用這個函數,我不得不使用本地WideCharToMultiByte來獲取正確解碼的字符串,因爲C#正在錯誤地處理編碼。 – leetNightshade 2013-06-06 16:48:35

相關問題