FASM - 如果文件存在 - 使用GetFileAttributes - INVALID_FILE_ATTRIBUTES值?

时间:2012-09-26 04:07:43

标签: winapi assembly file-exists fasm

我在FASM中使用GetFileAttributesA来确定文件是否存在。我知道如果文件不存在,返回值将为INVALID_FILE_ATTRIBUTES,但我不知道如何检查此值。

我的代码:

invoke GetFileAttributes,lpFileName
cmp    eax,IDK WHAT TO CHECK FOR
je     notfound
jne    found
invoke ExitProcess,0

看作编译器无法将INVALID_FILE_ATTRIBUTES识别为值:

cmp    eax,INVALID_FILE_ATTRIBUTES

不行。

有没有人知道这个常数的值,所以我可以手动输入它?

感谢任何帮助。感谢


在JensBjörnhager的回复之后,以下是其他任何感兴趣的人的工作代码:

invoke GetFileAttributes,lpFileName
cmp    eax,-1
je     notfound
jne    found
invoke ExitProcess,0 

甚至:

invoke GetFileAttributes,lpFileName
cmp    eax,$ffffffff
je     notfound
jne    found
invoke ExitProcess,0 

再次感谢JensBjörnhager!

2 个答案:

答案 0 :(得分:5)

INVALID_FILE_ATTRIBUTES定义为 -1($ ffffffff),因此请检查。

答案 1 :(得分:2)

您应该使用正确定义的宏INVALID_FILE_ATTRIBUTES,而不是在代码中使用幻数。这个宏在fasm安装的INCLUDE文件夹中的kernel32.inc中定义。您可以像这样包含此inc文件

包括'c:\ path \ to \ fasm \ INCLUDE \ EQUATES \ KERNEL32.INC'

或者您只能添加高级别的内容,例如

包括'c:\ path \ to \ fasm \ INCLUDE \ win32a.inc'(如果使用unicode版本的winapi,则为win32w.inc)

或者如果你在fasmw.ini的Environment部分中设置include值:

包括'win32a.inc'