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
AssignFile 对文件名有硬编码限制:259 个字符。
AssignFile 一直是 pascal 遗留文件 I/O 的一部分。这已被替换。使用 TFileStream
或类似的。还可以查看 TFile
、TPath
、TDirectory
和 System.IOUtils
单元中的其他内容。
根据 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
AssignFile 对文件名有硬编码限制:259 个字符。
AssignFile 一直是 pascal 遗留文件 I/O 的一部分。这已被替换。使用 TFileStream
或类似的。还可以查看 TFile
、TPath
、TDirectory
和 System.IOUtils
单元中的其他内容。