尋找標準的防錯方式將諸如「C:\ Documents and settings」之類的「長名稱」轉換爲等效的「短名稱」C:\ DOCUME〜 1「標準方式轉換爲短路徑.net
我需要這個來運行我的C#應用程序的外部進程。如果我用「長名稱」中的路徑餵它,它會失敗。
尋找標準的防錯方式將諸如「C:\ Documents and settings」之類的「長名稱」轉換爲等效的「短名稱」C:\ DOCUME〜 1「標準方式轉換爲短路徑.net
我需要這個來運行我的C#應用程序的外部進程。如果我用「長名稱」中的路徑餵它,它會失敗。
是否即使你用引號括起來的長文件路徑的外部進程失敗?如果外部應用程序支持它,這可能是一個更簡單的方法。
例如
myExternalApp "C:\Documents And Settings\myUser\SomeData.file"
如果您準備開始調用Windows API函數,則GetShortPathName()和GetLongPathName()會提供此功能。
見http://csharparticles.blogspot.com/2005/07/long-and-short-file-name-conversion-in.html
const int MAX_PATH = 255;
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]
string path,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuilder shortPath,
int shortPathLength
);
private static string GetShortPath(string path) {
var shortPath = new StringBuilder(MAX_PATH);
GetShortPathName(path, shortPath, MAX_PATH);
return shortPath.ToString();
}
+1我只是將一個exe只適用於shortpaths(由於內部bug) – 2009-05-13 01:23:00
MAX_PATH = 260在windows.h – Constantin 2011-01-06 14:55:44
來自WinAPI的GetShortPathName技巧工作正常,但在使用非常長的路徑時要小心。
我們在調用7zip的路徑長於MAX_PATH時遇到了問題。如果路徑太長,GetShortPathName不起作用。只需在前面添加「\?\」,然後它將完成這項工作並正確返回縮短的路徑。
FYI我相信「短路徑」是指「8.3名稱」 – user17753 2012-08-23 13:27:15