Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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# FileInfo在*短*路径名上失败_C#_.net_Pinvoke_Fileinfo_Pathname - Fatal编程技术网

C# FileInfo在*短*路径名上失败

C# FileInfo在*短*路径名上失败,c#,.net,pinvoke,fileinfo,pathname,C#,.net,Pinvoke,Fileinfo,Pathname,即使我使用了一个缩短的路径,(.Net)FileInfo()也不能说它太长了 我遇到了长路径问题,所以我调用了(Win32)GetShortPathNameW,它返回一个非常精致的短名称,如: “C:\temp\Test\targ1\FIRSTH~1\SECOND~1\sumtuff.txt.somethingTooLong.junk” 即使这只有72个字符长,(.Net)FileInfo()也会抛出一个异常:“指定的路径和/或文件名太长。完全限定的文件名必须少于260个字符,目录名必须少于24

即使我使用了一个缩短的路径,(.Net)FileInfo()也不能说它太长了

我遇到了长路径问题,所以我调用了(Win32)GetShortPathNameW,它返回一个非常精致的短名称,如:
“C:\temp\Test\targ1\FIRSTH~1\SECOND~1\sumtuff.txt.somethingTooLong.junk”

即使这只有72个字符长,(.Net)FileInfo()也会抛出一个异常:“指定的路径和/或文件名太长。完全限定的文件名必须少于260个字符,目录名必须少于248个字符。”

是的,LFN太长(>400个字符),但缩短后看起来很好。 Net是否正在将其转换回long

(在Windows 10下使用.Net 3.5(最低公分母)

仍然可以获得相同的回报:

    Unhandled Exception: System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.  
    at System.IO.Path.SafeSetStackPointerValue(Char* buffer, Int32 index, Char value)  
    at System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)  
    at System.IO.FileInfo..ctor(String fileName)  
    at Test.Program.Main(String[] args) in E:\Projects\Test\Test\Program.cs:line 12  


不能传递StringBuilder。见宾·沃克:@jdweng:你可能是对的,但这正是该页面的第二个示例所使用的。第二个示例中使用了一个封送处理方法(marshallas(UnmanagedType.LPTStr))将字符串生成器转换为LPTStr。该封送处理方法“可能”是c#中使用的默认方法,但我不确定。几周前我和某人讨论过这个问题,我是一个多疑的人,不相信我在写作中没有看到的东西。Microsoft在文档方面非常差。@jdweng不正确。你的品沃克声明很好。StringBuilder正确。无法传递StringBuilder。见宾·沃克:@jdweng:你可能是对的,但这正是该页面的第二个示例所使用的。第二个示例中使用了一个封送处理方法(marshallas(UnmanagedType.LPTStr))将字符串生成器转换为LPTStr。该封送处理方法“可能”是c#中使用的默认方法,但我不确定。几周前我和某人讨论过这个问题,我是一个多疑的人,不相信我在写作中没有看到的东西。Microsoft在文档方面非常差。@jdweng不正确。你的品沃克声明很好。StringBuilder是正确的。
    // simplified example (should have started with this)
    static void Main ( string[] args)
    {
    FileInfo FileMeta = new FileInfo ( @"C:\temp\Test\targ1\FIRSTH~1\SECOND~1\SumStuff.txt.somethingTooLong.junk");
    Console.WriteLine ( "Size: " + FileMeta.Length.ToString());
    }
    Unhandled Exception: System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.  
    at System.IO.Path.SafeSetStackPointerValue(Char* buffer, Int32 index, Char value)  
    at System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)  
    at System.IO.FileInfo..ctor(String fileName)  
    at Test.Program.Main(String[] args) in E:\Projects\Test\Test\Program.cs:line 12