Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何处理很长的文件名(使用TPath)?_Delphi_Delphi Xe7 - Fatal编程技术网

Delphi 如何处理很长的文件名(使用TPath)?

Delphi 如何处理很长的文件名(使用TPath)?,delphi,delphi-xe7,Delphi,Delphi Xe7,我有一个程序可以从网上下载一些文件。文件名可能很长(100个字符)。 用户可以选择将这些文件保存在具有很长名称(200个字符)的文件夹中。 这样,路径的总长度就结束了 我试图创建一个函数来检查路径是否过长,并截断文件名,这样整个路径将正好是260个字符。但是,如果路径超过260个字符,TPath类中的函数将无法工作。更确切地说,当路径超过260个字符时,GetDirectoryName会引发一个特定错误,因此我无法使用它从文件名中拆分文件夹 德尔福的主要设计缺陷? 我认为TPath在处理长文件名

我有一个程序可以从网上下载一些文件。文件名可能很长(100个字符)。 用户可以选择将这些文件保存在具有很长名称(200个字符)的文件夹中。 这样,路径的总长度就结束了

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

德尔福的主要设计缺陷?
我认为TPath在处理长文件名时出错是一个很大的缺陷。简单地使用GetDirectoryName进行读取(而不是写入)将导致程序崩溃。TPath应允许处理长路径。也许只有当您尝试编写具有长路径的文件时,它才会引发错误。但即使在那时也不行。NTFS接受长路径。那么,为什么德尔福要强迫你坚持260?有些程序可以处理长路径。例如,我使用Total Commander(从不使用资源管理器),因此我不受长文件名问题的影响

你知道怎么处理这个案子吗?

注意:下载过程是自动化的,所以我不会停止要求用户为每个不在260个字符以下的文件输入新的文件名。我想安静地处理这个问题。

就我个人而言,我的观点是,
TPath
在这里是错误的。断言Windows路径不能超过260个字符只是否定了现实。更重要的是,拒绝您在路径上执行文本处理的能力确实是相当令人费解的。那么,在我看来,
TPath
应该避免


这会让你回到过去的美好时光。您可以从
SysUtils
调用
ExtractFileDir
。它的工作原理和以前一样好。

以\\?\作为前缀以获得扩展路径支持,但资源管理器不会喜欢您的文件。如果
TPath
中的函数不好,您能否告诉我们哪些函数。GetDirectoryName在路径超过260个字符>时会引发错误,但资源管理器不喜欢您的文件-我不想保存长度超过260个字符的文件。我只想把路径截短到260个字符。因此,我的文件将与资源管理器兼容。是的,
TPath
糟透了。您始终可以从
SysUtils
中使用
ExtractFileDir
。至少在XE2中,TPath在网络(UNC)长路径名方面存在错误-我将带有固定代码的错误报告提交给QC,但我想他们只是不关心正常情况。。。