【问题标题】:FASM - If file exists - Using GetFileAttributes - INVALID_FILE_ATTRIBUTES value?FASM - 如果文件存在 - 使用 GetFileAttributes - INVALID_FILE_ATTRIBUTES 值?
【发布时间】:2012-09-17 15:31:03
【问题描述】:

我在 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

不会工作。

有谁知道这个常数的值,所以我可以简单地手动输入?

感谢任何帮助。谢谢


在 Jens Bjö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 

再次感谢 Jens Björnhager!

【问题讨论】:

    标签: winapi assembly file-exists fasm


    【解决方案1】:

    INVALID_FILE_ATTRIBUTES 被定义为 -1 ($ffffffff),所以检查一下。

    【讨论】:

      【解决方案2】:

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

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

      或者你可以只添加高级包含喜欢

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

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

      包括“win32a.inc”

      【讨论】:

      • 我确实在我所有的 FASM 项目中都包含了 win32a.inc... 不包含 KERNEL32.INC 会增加我的应用程序输出文件的大小吗?编辑:为了清楚起见,仅包含 win32a.inc 时未定义 INVALID_FILE_ATTRIBUTES。感谢您的好评!
      • >> 不包括 KERNEL32.INC 会增加我的应用程序输出文件的大小吗? --- 不,当然,只有函数的定义。抱歉,我有错误,我想到了 INVALID_HANDLE_VALUE,定义 =(。INVALID_FILE_ATTRIBUTES 丢失,是的。最好的解决方法是在文件开头定义 INVALID_FILE_ATTRIBUTES = -1 并避免使用幻数)
      • 是的,既然我知道它的价值,我当然可以自己定义它。谢谢您的帮助! :)
      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多