【问题标题】:How to handle very long file names (with TPath)?如何处理很长的文件名(使用 TPath)?
【发布时间】:2015-07-15 09:59:44
【问题描述】:

我有一个从 Internet 下载一些文件的程序。文件名可能很长(100 个字符)。 用户可以选择将这些文件保存在一个名称很长(200 个字符)的文件夹中。 所以,路径的总长度超过了260 chars

我尝试创建一个函数来检查路径是否太长并截断文件名,因此整个路径将正好是 260 个字符。但是如果路径超过 260 个字符,则 TPath 类中的函数将无法工作。更准确地说,当路径超过 260 个字符时,GetDirectoryName 会引发特定错误,因此我不能使用它来从文件名中拆分文件夹。

Delphi 的主要设计缺陷?
我认为 TPath 在处理长文件名时引发错误是一个很大的缺陷。简单地使用 GetDirectoryName 读取(而不是写入)只会使您的程序崩溃。 TPath 应该允许处理长路径。可能仅当您尝试使用长路径写入文件时才会引发错误。但即便如此。 NTFS 接受长路径。那么,为什么Delphi要强迫你坚持260呢?有些程序可以处理长路径。例如,我使用 Total Commander(从不使用 Explorer),因此不受长文件名问题的影响。

您知道如何处理这种情况吗?
注意:下载过程是自动化的,所以我不会停下来要求用户为每个不能低于 260 个字符的文件输入一个新文件名。我想静静地处理。

【问题讨论】:

  • 前缀为 \\?\ 以获得扩展路径支持 msdn.microsoft.com/en-gb/library/windows/desktop/… 但是资源管理器不会喜欢您的文件。如果TPath中的功能不好,可以告诉我们哪些。
  • GetDirectoryName 在路径超过 260 个字符时引发错误
  • > 但是资源管理器不会喜欢您的文件 - 我不想保存长度超过 260 的文件。我只想将路径截断为 260 个字符。因此,我的文件将与资源管理器兼容。
  • 是的,TPath 很烂。您可以随时使用SysUtils 中的ExtractFileDir
  • 至少在 XE2 中,TPath 在网络 (UNC) 长路径名方面存在错误 - 我将带有固定代码的错误报告提交给 QC,但我认为他们只是像往常一样不在乎......跨度>

标签: delphi delphi-xe7


【解决方案1】:

我个人认为TPath 在这里是完全错误的。断言 Windows 路径不能超过 260 个字符简直是在否认现实。更何况,否定你对路径进行文本处理的能力,实在是太莫名其妙了。在我看来,TPath 应该避免使用。

这会让你回到过去的美好时光。您可以从SysUtils 拨打ExtractFileDir。它的效果和以往一样好。

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多