Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
在.net中转换为短路径的标准方法_.net_Path_Quotes - Fatal编程技术网

在.net中转换为短路径的标准方法

在.net中转换为短路径的标准方法,.net,path,quotes,.net,Path,Quotes,正在寻找标准的防bug方法,将“长名称”(如“C:\Documents and settings”)转换为等效的“短名称”(C:\DOCUME~1) 我需要这个来运行我的C#应用程序的外部进程。如果我在“long name”中为它提供路径,它将失败。如果您准备开始调用Windows API函数,那么GetShortPathName()和GetLongPathName()将提供此功能 看 即使将长文件路径括在引号中,外部进程是否也会失败?如果外部应用程序支持,这可能是一种更简单的方法 e、 g 使

正在寻找标准的防bug方法,将“长名称”(如“C:\Documents and settings”)转换为等效的“短名称”(C:\DOCUME~1)


我需要这个来运行我的C#应用程序的外部进程。如果我在“long name”中为它提供路径,它将失败。

如果您准备开始调用Windows API函数,那么GetShortPathName()和GetLongPathName()将提供此功能


即使将长文件路径括在引号中,外部进程是否也会失败?如果外部应用程序支持,这可能是一种更简单的方法

e、 g


使用WinAPI中的GetShortPathName的技巧可以很好地工作,但是在那里使用很长的路径时要小心


我们只是在调用7zip时遇到了一个问题,路径比MAX_PATH长。如果路径太长,则GetShortPathName不起作用。只需在它前面加上“\?\”前缀,它就能完成任务并返回正确的缩短路径。

它可以工作。你有任何解释或文件来解释发生了什么吗?没有。如果字符串用引号分隔,现代应用程序接受带空格的参数只是(合理地)标准行为……您需要引号,因为路径基本上是一个命令行选项,空格是命令行选项的分隔符。如果使用带有空格的路径,则命令行将被解析为多个选项。定义:“空格”-ASCII字符通常被误认为是缺少字符+1 im,只是集成了一个只适用于短路径的exe(由于内部错误),这似乎失败了(不返回任何内容)如果传递的路径大于
MAX\u path
,则需要缩短。我认为字符串应编组为
LPWStr
,而不是
LPTStr
。仅供参考,“短路径”指的是“8.3名称”
    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();
    }
myExternalApp "C:\Documents And Settings\myUser\SomeData.file"