如何处理非常长的文件名(使用 TPath)?
How to handle very long file names (with TPath)?
我有一个程序可以从 Internet 下载一些文件。文件名可能很长(100 个字符)。
用户可以选择将这些文件保存在名称很长(200 个字符)的文件夹中。
所以,路径总长度超过260 chars.
我尝试创建一个函数来检查路径是否太长并截断文件名,以便整个路径正好是 260 个字符。但是如果路径超过 260 个字符,TPath class 中的函数将无法工作。更确切地说,当路径超过 260 个字符时,GetDirectoryName 会引发特定错误,因此我无法使用它从文件名中拆分文件夹。
Delphi的主要设计缺陷?
我认为 TPath 在处理长文件名时引发错误是一个很大的缺陷。简单地使用 GetDirectoryName 来读取(而不是写入)只会使您的程序崩溃。 TPath 应该允许处理长路径。也许它应该只在您尝试使用长路径写入文件时引发错误。但即便如此。 NTFS 接受长路径。那么,为什么 Delphi 应该强迫你坚持使用 260?一些程序可以处理长路径。例如,我使用 Total Commander(从不使用 Explorer),所以我不受长文件名问题的影响。
知道如何处理这个案例吗?
注意:下载过程是自动的,所以我不会停下来要求用户为每个不能少于 260 个字符的文件输入新的文件名。我想默默地处理这件事。
就我个人而言,我认为 TPath
在这里完全是错误的。断言 Windows 路径不能大于 260 个字符简直是在否定现实。更何况,要否定你对路径进行文本处理的能力,实在是太莫名其妙了。那么在我看来,应该避免TPath
。
这会让你回到过去的美好时光。您可以从 SysUtils
调用 ExtractFileDir
。它和以前一样好用。
我有一个程序可以从 Internet 下载一些文件。文件名可能很长(100 个字符)。 用户可以选择将这些文件保存在名称很长(200 个字符)的文件夹中。 所以,路径总长度超过260 chars.
我尝试创建一个函数来检查路径是否太长并截断文件名,以便整个路径正好是 260 个字符。但是如果路径超过 260 个字符,TPath class 中的函数将无法工作。更确切地说,当路径超过 260 个字符时,GetDirectoryName 会引发特定错误,因此我无法使用它从文件名中拆分文件夹。
Delphi的主要设计缺陷?
我认为 TPath 在处理长文件名时引发错误是一个很大的缺陷。简单地使用 GetDirectoryName 来读取(而不是写入)只会使您的程序崩溃。 TPath 应该允许处理长路径。也许它应该只在您尝试使用长路径写入文件时引发错误。但即便如此。 NTFS 接受长路径。那么,为什么 Delphi 应该强迫你坚持使用 260?一些程序可以处理长路径。例如,我使用 Total Commander(从不使用 Explorer),所以我不受长文件名问题的影响。
知道如何处理这个案例吗?
注意:下载过程是自动的,所以我不会停下来要求用户为每个不能少于 260 个字符的文件输入新的文件名。我想默默地处理这件事。
就我个人而言,我认为 TPath
在这里完全是错误的。断言 Windows 路径不能大于 260 个字符简直是在否定现实。更何况,要否定你对路径进行文本处理的能力,实在是太莫名其妙了。那么在我看来,应该避免TPath
。
这会让你回到过去的美好时光。您可以从 SysUtils
调用 ExtractFileDir
。它和以前一样好用。