2008-11-03 61 views
5

尋找標準的防錯方式將諸如「C:\ Documents and settings」之類的「長名稱」轉換爲等效的「短名稱」C:\ DOCUME〜 1「標準方式轉換爲短路徑.net

我需要這個來運行我的C#應用​​程序的外部進程。如果我用「長名稱」中的路徑餵它,它會失敗。

+0

FYI我相信「短路徑」是指「8.3名稱」 – user17753 2012-08-23 13:27:15

回答

4

是否即使你用引號括起來的長文件路徑的外部進程失敗?如果外部應用程序支持它,這可能是一個更簡單的方法。

例如

myExternalApp "C:\Documents And Settings\myUser\SomeData.file" 
19

如果您準備開始調用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

+1我只是將一個exe只適用於shortpaths(由於內部bug) – 2009-05-13 01:23:00

+1

MAX_PATH = 260在windows.h – Constantin 2011-01-06 14:55:44

3

來自WinAPI的GetShortPathName技巧工作正常,但在使用非常長的路徑時要小心。

我們在調用7zip的路徑長於MAX_PATH時遇到了問題。如果路徑太長,GetShortPathName不起作用。只需在前面添加「\?\」,然後它將完成這項工作並正確返回縮短的路徑。

相關問題