FileExists 工作 AssignFile 不适用于带有 \\?\ 的长路径

FileExists works AssignFile does not for long paths with \\?\

根据 Microsoft[1] 和其他网页的建议,我在 Delphi 中的 path/file 字符串前面添加了额外的四个字符 "\?\"。这使我能够绕过 FileExists 时遇到的错误(这意味着它可以正确找到文件并且 return“True”而不是“False”)

然而,相同的字符串传递给 Assign()AssignFile() 它无法正常工作。

在这个阶段 file_name 看起来像这样

'\?\C:\Users\xyz\xyz\xyz\ONELONGWORD\xyz\xyz\namer.abc'

我得到的错误是;

使用此代码段:

procedure xyz(file_name : string; var FID: TextFile;)
.....
.....
.....
assignfile(FID,file_name);
rewrite(FID); // 

我在 AssignFile 行收到无效文件名错误。

有了这个片段

procedure xyz(file_name : string; var FID: TextFile;)
.....
.....
.....
assign(FID,file_name);
rewrite(FID); // 

我在 rewrite 行收到无法访问的值错误。

知道如何解决这个问题吗?

我正在使用 Delphi 10.X

[1] https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maximum-path-length-limitation

AssignFile 对文件名有硬编码限制:259 个字符。

AssignFile 一直是 pascal 遗留文件 I/O 的一部分。这已被替换。使用 TFileStream 或类似的。还可以查看 TFileTPathTDirectorySystem.IOUtils 单元中的其他内容。