Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 FileExists()返回false,即使文件存在_Delphi_Windows 7_Delphi 2007 - Fatal编程技术网

Delphi FileExists()返回false,即使文件存在

Delphi FileExists()返回false,即使文件存在,delphi,windows-7,delphi-2007,Delphi,Windows 7,Delphi 2007,我想检查System32目录(Windows 7)中是否存在dll。但即使它存在,FileExists()也返回false。LoadLibrary返回一个有效句柄。 在这种情况下,我只想检查文件是否存在,并将此信息可视化。 您是否有解决此问题的技巧?没有太多信息,您使用的代码可能会有所帮助,但这可能是一个64位问题,并且dll实际上位于SysWOW64文件夹中?有关如何工作的详细说明,请参阅。您几乎肯定没有在FileExists调用中指定文件的完整或有效相对路径LoadLibrary将为您搜索某

我想检查System32目录(Windows 7)中是否存在dll。但即使它存在,FileExists()也返回false。LoadLibrary返回一个有效句柄。 在这种情况下,我只想检查文件是否存在,并将此信息可视化。
您是否有解决此问题的技巧?

没有太多信息,您使用的代码可能会有所帮助,但这可能是一个64位问题,并且dll实际上位于SysWOW64文件夹中?有关如何工作的详细说明,请参阅。

您几乎肯定没有在
FileExists
调用中指定文件的完整或有效相对路径
LoadLibrary
将为您搜索某些位置(DLL应该驻留的位置),但
FileExists
不会。提供完整且正确的路径,并且
FileExists
将正常工作。

最有可能的原因是文件重定向。您有一台64位计算机,但通过32 Delphi进程,
Windows\system32
实际上会重定向到
Windows\Syswow64
。因此,当您认为您要求在
Windows\system32
中存在文件时,系统实际上是在
Windows\Syswow64
中报告文件的存在(或其他)


如果确实需要了解真正的64位系统32,则需要禁用文件重定向。您可以使用该函数执行此操作。别忘了用开关把它重新打开。请注意,禁用重定向程序会产生广泛的影响,并可能导致非常奇怪的行为,因此请小心操作。

这是最荒谬的原因,但如果它只能帮助一个人

确保没有意外地将文件命名为
something.dll.dll

我只是遇到了这样一种情况:我在客户端计算机上安装了一个应用程序,然后应用程序找不到位于同一目录中的
config.txt
。这在其他计算机上运行得很好,所以我当然被难倒了


原来此客户端计算机上的“显示文件扩展名”设置已关闭,并且该文件实际上已命名为
config.txt.txt
。。。为我辩护,我90%的时间花在OSx上,9.99%的时间花在我自己的Windows系统上,从很久以前起就启用了“显示文件扩展名”。

我猜是“权限”问题。Vista/Windows 7非常保护人们在\Windows:)中闲逛。@paulsm4:不,不可能。Windows将始终让您发现文件是否存在。这更像它。(嗯,当然还有一些愚蠢的打字错误……)现在我想起来了,我99%认为这就是问题所在+1,当然。是的,可能是这样,在过去我有类似的事情,奇怪的是,我的总指挥官也给我看了重定向文件夹,有人告诉我这是因为它是32位的,一切都很清楚。(你仍然可以在那里禁用重定向)。总之,刚检查了TC站点,现在有一个64位测试版。您可以使用特殊的“Sysnative”别名访问64位System32文件夹,而无需禁用文件系统重定向,例如:
FileExists('C:\Windows\Sysnative\filename.dll')
@Remy这是一个很好的观点,但如果您希望支持XP 64,则需要确保安装了相关的修补程序。