2012-05-23 58 views
1

有一個顯示8.3短格式路徑的網絡位置。我需要將它們轉換爲長格式以便在UNIX上使用。將8.3文件名轉換爲長文件名

由於它的網絡位置,我需要它需要使用UNC路徑。

任何想法?

回答

2

答案由短變長爲just a Google search away。這將適用於UNC路徑only on Windows Vista and up(以及可能的XP w /某些服務包)。

using System; 
using System.Runtime.InteropServices; 
using System.Text; 

public class _Main 
{ 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
    public static extern int GetLongPathName(
     string path, 
     StringBuilder longPath, 
     int longPathLength 
     ); 

    public static void Main() 
    { 
     StringBuilder longPath = new StringBuilder(255); 
     GetLongPathName(@"\\?\UNC\server\d$\MYTEMP~1\RESOUR~1\sql.txt", longPath, longPath.Capacity); 
     Console.WriteLine(longPath.ToString()); 
    } 
} 
+1

不需要兩個的MarshalAs屬性。 –

+0

這仍然不適用於我的方案。我認爲這是因爲我的UNC路徑。它是NetApp文件管理器中的CIFS共享。基於你的評論:_這將只適用於Windows Vista及更高版本的UNC路徑(以及可能的XP w /某些Service Pack)._我認爲這可能是問題所在? – Web

+1

它是如何失敗? Marshal :: GetLastWin32Error告訴你什麼? –

0

這對我的作品甚至withc UNC路徑:

string shortName = @"\\MyComputer\c$\PROGRA~1"; 
string longName = new FileInfo(shortName).FullName; 
// ==> longname: \\MyComputer\c$\Program Files 
相關問題