【问题标题】:How to shorten a path in c# and keep it valid如何缩短c#中的路径并保持有效
【发布时间】:2017-08-07 14:53:46
【问题描述】:

我在一个目录有这么长的名字并且在这样一棵长树中的地方工作。

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

我知道 Microsoft 操作系统可以缩短路径名称,例如将 C:\TooLongName\TooLongSubDirectory 转换为 C:\TooLon~1\TooLon~1 之类的名称。

但是我怎样才能在 C# 中做到这一点并且仍然保持中殿有效和可用?

PS:我没有使用标准的FileInfoDirectoryInfo 类,我只使用将发送到我无法以任何方式更改的外部应用程序的字符串。

【问题讨论】:

  • 您可以更新您的应用程序以允许使用长文件名吗?它将在哪个操作系统上运行?
  • 我无法更改外部应用程序中的任何内容。我只是想学习如何缩短路径(我会将缩短的路径提供给外部应用程序)。
  • 您使用的是 .net 4.6.2 和 windows 10 吗?
  • 我使用的是 .NET 4.5,Windows 7。

标签: c# windows path pathtoolongexception


【解决方案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:\Projects\DATABA~1\REALLL~1\STILLL~1

【讨论】:

  • 听起来确实是正确的方法,但它总是返回一个空字符串。
  • 它适用于计算机中的文件夹,但不适用于以@“\\”开头的文件夹,例如网络文件夹。
  • 我不相信你可以缩短 UNC 股票。但是您也许可以将 UNC 共享挂载到更远的位置。
  • 你说的“安装在树的下方”是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2018-04-26
  • 2020-04-26
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多