2017-08-07 8 views
2

私は、ディレクトリにこのようなルーオン名があり、そのようなルーオンツリーにある場所で働いています。C#でパスを短縮して有効にする方法

外部アプリケーションのフォルダのパス名が長すぎます(この外部アプリケーションは変更できませんが、パス名を短縮できます)。

Microsoftオペレーティングシステムでは、C:\TooLongName\TooLongSubDirectoryのようなものをC:\TooLon~1\TooLon~1に変換するなど、パス名を短縮できます。

しかし、これをC#でどうやって有効にして有効にしておくことができますか?

PS:私は標準FileInfoDirectoryInfoクラスを使用していませんが、私は決して変更できない外部アプリケーションに送信される文字列を使用しています。

+0

あなただけではなく、長いファイル名を許可するあなたのアプリを更新することはできますか?どのOSが実行されますか? – DavidG

+0

外部アプリケーションでは何も変更できません。私はちょうどパスを短縮する方法を学びたい(そして、私は外部アプリケーションへの短縮されたパスを与えるだろう)。 –

+0

.net 4.6.2&windows 10を使用していますか? – Darren

答えて

1

Windows 10に長いパスサポートビルドを使用できない場合は、Win32コマンドGetShortPathNameを使用できます。適切な経路を生成するため。

class Program 
{ 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    static extern uint GetShortPathName(
     [MarshalAs(UnmanagedType.LPTStr)] 
     string lpszLongPath, 
     [MarshalAs(UnmanagedType.LPTStr)] 
     StringBuilder lpszShortPath, 
     uint cchBuffer); 

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    static extern uint GetShortPathName(string lpszLongPath, char[] lpszShortPath, int cchBuffer); 

    static void Main(string[] args) 
    { 
     StringBuilder builder = new StringBuilder(260); 
     var shortPath = GetShortPathName(@"C:\Projects\Databases\ReallllllllllllllyLOOOOOOOOOOOOOOOOOOOOOONGPATHHHHHHHHHHH\StillllllllllllllllllGOoooooooooooooooooooooooing", builder, (uint)builder.Capacity); 
     Console.WriteLine(builder.ToString()); 
     Console.ReadKey(); 
    } 
} 

はCを生成:プロジェクト\ \がdataba〜1 \ REALLL〜1 \ STILLL〜1

+0

実際に正しい方法で聞こえますが、空の文字列が返されます。 –

+0

これは、コンピュータのフォルダでは動作しますが、ネットワークフォルダなど、@ "\\"で始まるフォルダでは動作しません。 –

+0

私はUNCの株式を減らすことはできないと信じていません。しかし、あなたはUNCシェアをツリーの下にさらに広げることができるかもしれません。 – Darren

関連する問題