如何在SaveFileDialog中的默认FileName中设置长字符串(> 260)?

我正在使用SaveFileDialog并且必须在FileName中设置长字符串(longFileName)。字符串longFileName在运行时已知。 如果我订
saveFileDialog.FileName = longFileName ;
然后我得到
System.IO.PathTooLongException
。 我该怎么做?     
已邀请:
底线是......你不能,NTFS的最大文件名大小为256.我的建议,缩短你的文件名。     
虽然文件名可以超过260个字符,但您可能会遇到API的一些奇怪之处。此外,.net不直接支持它。 如果您想了解更多信息,请参阅BCL团队博客上关于该问题的三篇帖子中的第一篇:http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in -net部分-1-的-3- KIM-hamilton.aspx     
答案如下:   问:文件名的最大字符数是多少?      答:这取决于是在FAT还是NTFS分区上创建文件。 NTFS分区上的最大文件名长度为256个字符,FAT上为11个字符(8个字符名称,。,3个字符扩展名)。 NTFS文件名保留其大小写,而FAT文件名没有大小写的概念(但是在NTFS上执行搜索等时会忽略大小写)。还有新的VFAT,它还有256个字符的文件名。 资源 基本上,操作系统确定最大文件大小,而不是您的应用程序。如果将来发布一个支持更多字符的更好的文件系统,您可以通过允许它来使软件向前兼容,并让用户知道当前路径太长时间。但是,根据当前的技术进步,您不能使用大于256个字符的文件名。     
您可以使用以下命令尝试文件名的短路径版本:
  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
  public static extern int GetShortPathName(
     [MarshalAs(UnmanagedType.LPTStr)] System.String path,
     [MarshalAs(UnmanagedType.LPTStr)] System.Text.StringBuilder shortPath,
     System.Int32 shortPathLength);
然后保存文件对话框看起来像这样:
     string long_path = @"C:Program FilesMicrosoft Visual Studio 8Common7PackagesDebugger1033vsdebugui.dll";
     StringBuilder s = new StringBuilder(long_path.Length);
     int short_path_length = GetShortPathName(long_path, s, long_path.Length);
     string short_path = s.ToString();
     SaveFileDialog save_d = new SaveFileDialog();
     save_d.FileName = short_path;
     save_d.ShowDialog();
    
你不能。 请记住,Windows中的路径必须少于256个字符。 (除非你使用特殊技巧) 为什么你想要这么长的文件名?     
正如其他人所提到的,没有好办法解决这个限制。但问题不在于NTFS,而是在Win32中。如果你真的想要使用SFU,你可以制作一些非常漫长的路径,但它使得本机Win32的内容很有趣。 您可能希望尝试使用\?添加路径。我从未尝试使用.NET。     
\?
添加到路径的开头。所以
D:<very_long_path>
会变成
\?D:<very_long_path>
。请参阅http://msdn.microsoft.com/en-us/library/aa365247.aspx中的参考“最大路径长度限制”。     

要回复问题请先登录注册