- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用 Delphi 7 编写程序。我只需要它能够处理非 Unicode 文件名。如果它找到一个 Unicode 文件名,它应该忽略它。
我的代码如下所示:
var Filename: String;
if not FileExists(Filename) then Exit;
F := TFileStream(Filename, fmOpenRead or fmShareDenyWrite);
但是,对于某些 Unicode 文件名,FileExists() 返回 true,但随后 TFileStream 会引发异常,因为路径无效。
例如:名为“loop轮纹.jpg”的文件被读入Filename为“loop??.jpg”。这是预期的行为。 TFileStream 无法读取此类文件(因为目录中没有“loop ??.jpg”)并引发异常。但 FileExists() 应该发现该文件不存在。为什么它不起作用?因为它的定义是:
function FileExists(const FileName: string): Boolean;
begin
Result := FileAge(FileName) <> -1;
end;
FileAge() 定义为:
function FileAge(const FileName: string): Integer;
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
...
FindFirstFile 使用“loop ??.jpg”作为掩码,然后查找“loop 轮纹.jpg”。
所以问题是:
1) 我可以在 Delphi 7 中以某种方式轻松地在 TFileStream 中使用 Unicode 文件名吗?
或
2) 我应该使用什么函数代替 FileExists 才能获得正确的结果?
最佳答案
TFileStream
本身不行,不行。但您可以使用 Win32 CreateFileW()
打开 Unicode 文件名,然后将返回的 HANDLE
分配给 THandleStream
。这本质上就是 TFileStream
内部所做的事情(在 Delphi 7 中使用 CreateFileA()
代替)。
Delphi 的更高版本使用 Win32 GetFileAttributes()
1 而不是 RTL 的 FileAge()
在其 FileExists()
实现中。 GetFileAttributes()
不支持通配符,就像 FindFirstFile()
一样。
1. 请参阅 Why is GetFileAttributes the way old-timers test file existence?
或者,您可以在打开文件之前根本不检查文件是否存在,只需无条件打开它并捕获由此产生的错误。操作系统会告诉您失败是否是由于找不到文件或其他错误造成的。
关于delphi - FileExists 返回 true 但文件不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424510/
我需要检查是否存在每天生成的文件,周末和公共(public)/银行假日除外。每天的文件名都基于日期,所以如果我要在星期天运行它,我需要宏来执行以下操作。 我需要它来检查文件是否存在(它不会在星期日),
考虑这个示例 VBScript 片段: Dim fs Set fs = CreateObject("Scripting.FileSystemObject") If fs.FileExists("D:\
我有几个线程在集群系统上从 Python 并行运行。每个 python 线程都输出到一个目录 mydir。每个脚本,在输出之前检查 mydir 是否存在,如果不存在则创建它: if not os.pa
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
fileExists 远程文件检查是否使用 cfhttp 头? 在检查远程文件时,我担心 fileExists over CFHTTP 的速度 -- Returns Yes -- FileExis
我用 Delphi 7 编写程序。我只需要它能够处理非 Unicode 文件名。如果它找到一个 Unicode 文件名,它应该忽略它。 我的代码如下所示: var Filename: String;
我想检查System32目录(Windows 7)中的dll是否存在。但即使存在,FileExists() 也会返回 false。 LoadLibrary 返回一个有效的句柄。在这种情况下,我只想检查
Jenkins 管道函数 fileExist 可以处理通配符吗?我的工作区文件夹中有一个 zip 文件。以下代码给出 hifalse: WORKSPACE = pwd() echo "hi"+file
这个问题在这里已经有了答案: NSFileManager.defaultManager().fileExistsAtPath returns false instead of true (2 个答案
在我的脚本中,我正在检查目录中的一个目录和两个文件是否存在。虽然第一个返回正确的值,但第二个检查没有。我已经多次检查这些文件是否存在于指定目录中,但 Inno Setup 总是告诉我它们不存在。这是在
我有一个脚本可以定期从 RSS 提要下载信息,其中一个是图像。现在,我正在使用 FileSystemObject 和 FileExists 比较在下载图像之前检查图像是否存在,这样我就不会一遍又一遍地
这行代码: if !FileManager.fileExists(atPath: documentDirectory.appendingPathComponent("newname.pdf")) 出现
这个问题已经有答案了: Hash different for the same object, Swift, Hashable (1 个回答) 已关闭 3 年前。
看来,我想用 FileExists() 检查的一些文件即使在那里也永远找不到,而其他的每次都会被找到。 如果我将文件“driver.sys”放入“C:\Windows\System32\drivers
当尝试使用FileExists函数检测UTF-8编码的文件是否存在时,找不到文件。 我发现在 Coldfusion 服务器中,Java 文件编码最初设置为“UTF-8”。由于某种未知的原因,它又回到了
当我使用方法.fileExists(atPath:)判断文件是否存在于文件系统中时,该方法总是返回false给我。我检查了文件系统,文件确实存在。这是我的代码: let filePath = url?
关于 Tensorflow 的一个简短问题。 为什么 tf.gfile.Exist 和 Env::FileExists 方法的返回值在文件名为空字符串时为真? import tensorflow as
我在 ColdFusion 9 上运行一个站点,该站点将缓存信息存储在 Amazon S3 上。 ColdFusion 应用程序构建文件并将它们放入 Amazon S3。每 N 小时,缓存就会被一个执
我是一名优秀的程序员,十分优秀!