Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何缩短c#中的路径并保持其有效性_C#_Windows_Path_Pathtoolongexception - Fatal编程技术网

如何缩短c#中的路径并保持其有效性

如何缩短c#中的路径并保持其有效性,c#,windows,path,pathtoolongexception,C#,Windows,Path,Pathtoolongexception,我在一个地方工作,目录有这样一个长的名字,并且在这样一个长的树上 我在外部应用程序中的文件夹路径名太长时遇到问题(我无法更改此外部应用程序,但我可以给它缩短路径名) 我知道Microsoft操作系统可以缩短路径名,例如在类似于C:\toolong~1\TooLon~1的东西中转换C:\TooLongName\TooLongSubDirectory 但我如何才能在C#中做到这一点,同时保持中堂的有效性和可用性 注:我没有使用标准的FileInfo和DirectoryInfo类,我只使用将发送到外部

我在一个地方工作,目录有这样一个长的名字,并且在这样一个长的树上

我在外部应用程序中的文件夹路径名太长时遇到问题(我无法更改此外部应用程序,但我可以给它缩短路径名)

我知道Microsoft操作系统可以缩短路径名,例如在类似于
C:\toolong~1\TooLon~1
的东西中转换
C:\TooLongName\TooLongSubDirectory

但我如何才能在C#中做到这一点,同时保持中堂的有效性和可用性


注:我没有使用标准的
FileInfo
DirectoryInfo
类,我只使用将发送到外部应用程序的字符串,我不能以任何方式更改这些字符串

如果无法在Windows 10中使用长路径支持内置,则可以使用Win32命令。以生成合适的路径

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:\Projects\DATABA~1\REALLL~1\STILLL~1

您能更新应用程序以允许长文件名吗?它将在哪个操作系统上运行?我无法更改外部应用程序中的任何内容。我只想学习如何缩短路径(我将为外部应用程序提供缩短的路径)。您使用的是.net 4.6.2和windows 10吗?我使用的是.net 4.5和windows 7。这是什么?听起来确实是正确的方法,但它总是返回空字符串。它适用于计算机中的文件夹,但不适用于以@“\\”开头的文件夹,例如网络文件夹。我不相信你可以缩短UNC共享。但是你也许可以把UNC共享安装在树下更远的地方。你说的“安装在树下更远的地方”是什么意思?