【问题标题】:How to set long string(>260) in default FileName in SaveFileDialog?如何在 SaveFileDialog 中的默认 FileName 中设置长字符串(> 260)?
【发布时间】:2010-12-22 01:18:41
【问题描述】:

我正在使用 SaveFileDialog 并且必须在 FileName 中设置长字符串(longFileName)。字符串 longFileName 在运行时是已知的。

如果我设置

saveFileDialog.FileName = longFileName ;

然后我得到System.IO.PathTooLongException

我该怎么做?

【问题讨论】:

  • “文件名”是指包含其路径的全名,还是仅指相对于其父文件夹的名称?

标签: c# .net windows savefiledialog long-filenames


【解决方案1】:

简而言之,你不能; NTFS 的最大文件名大小为 256。

我的建议是缩短你的文件名。

【讨论】:

    【解决方案2】:

    \\?\ 添加到路径的开头。所以D:\<very_long_path> 会变成\\?\D:\<very_long_path>。请参阅http://msdn.microsoft.com/en-us/library/aa365247.aspx中的“最大路径长度限制”

    【讨论】:

    • File.Create(@"\\?\" + filePath, (int) file.Value.Length) > 对吗?我无法在很长时间的文件夹中创建文件! PathTooLongException 异常
    【解决方案3】:

    正如其他人所提到的,没有解决此限制的好方法。然而问题不在于 NTFS,它在Win32。使用 SFU,如果您真的愿意,您可以创建一些非常长的路径,但它使与本机 Win32 内容的互操作变得有趣。

    您可能想尝试在路径前加上 \\?\。不过,我从来没有用 .NET 尝试过。

    【讨论】:

      【解决方案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

      【讨论】:

        【解决方案5】:

        您可以尝试使用短路径版本的文件名:

          [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();
        

        【讨论】:

          【解决方案6】:

          答案在于:

          问:文件名的最大字符数是多少?

          答:这取决于文件是在 FAT 还是 NTFS 分区上创建的。 NTFS 分区上的最大文件名长度为 256 个字符,而 FAT 上的最大文件名长度为 11 个字符(8 个字符名称,. ,3 个字符扩展名)。 NTFS 文件名保持大小写,而 FAT 文件名没有大小写概念(但是在 NTFS 上执行搜索等时会忽略大小写)。新的 VFAT 也有 256 个字符的文件名。

          Source

          基本上,操作系统决定最大文件大小,而不是您的应用。如果将来发布一个支持更多字符的更好的文件系统,您总是可以通过允许它来使您的软件向前兼容,并让用户知道路径何时过长。但是,随着当前技术的进步,您不能使用超过 256 个字符的文件名。

          【讨论】:

            【解决方案7】:

            你不能。

            请记住,Windows 中的路径必须少于 256 个字符。 (除非你使用特殊技巧)

            你为什么首先想要这么长的文件名?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-17
              • 2014-05-08
              • 1970-01-01
              • 2011-12-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多