我正在使用SaveFileDialog并且必须在FileName中设置长字符串(longFileName)。字符串longFileName在运行时已知。
如果我设置
saveFileDialog.FileName = longFileName ;
然后我得到System.IO.PathTooLongException
。
我该怎么做?
答案 0 :(得分:5)
我的建议是缩短你的文件名。
答案 1 :(得分:4)
虽然文件名可能超过260个字符,但您可能会遇到API的一些奇怪现象。此外,.net不直接支持它。
如果您想了解更多信息,请点击此处链接至BCL团队博客中有关此问题的三篇帖子中的第一篇:http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx
答案 2 :(得分:1)
答案如下:
问:文件名的最大字符数是多少?
答:这取决于是在FAT还是NTFS分区上创建文件。 NTFS分区上的最大文件名长度为256个字符,FAT上为11个字符(8个字符名称,。,3个字符扩展名)。 NTFS文件名保留其大小写,而FAT文件名没有大小写的概念(但是在NTFS上执行搜索等时会忽略大小写)。还有新的VFAT,它还有256个字符的文件名。
基本上,操作系统会确定最大文件大小,而不是您的应用程序。如果将来发布一个支持更多字符的更好的文件系统,您可以通过允许它来使软件向前兼容,并让用户知道当前路径太长时间。但是,根据当前的技术进步,您不能使用大于256个字符的文件名。
答案 3 :(得分:1)
您可以使用以下方法尝试文件名的短路径版本:
[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 Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\1033\vsdebugui.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();
答案 4 :(得分:0)
你做不到。
请记住,Windows中的路径必须少于256个字符。 (除非你使用特殊技巧)
为什么你想要这么长的文件名呢?
答案 5 :(得分:0)
正如其他人所说,没有好办法解决这个限制。但问题不在于NTFS,而在Win32。如果你真的想要使用SFU,你可以制作一些可笑的长路径,但是它使得本机Win32的内容很有趣。
您可能希望尝试使用\\?\添加路径。我从来没有尝试使用.NET。
答案 6 :(得分:0)
将\\?\
添加到路径的开头。因此D:\<very_long_path>
将成为\\?\D:\<very_long_path>
。请参阅http://msdn.microsoft.com/en-us/library/aa365247.aspx