2012-09-26 96 views
3

我正在使用GetFileAttributesA來確定文件是否存在,在FASM中。我知道如果文件不存在,返回值將是INVALID_FILE_ATTRIBUTES,但我不知道如何檢查此值。FASM - 如果文件存在 - 使用GetFileAttributes - 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 

將無法​​工作。

有誰知道這個常數的值,以便我可以簡單地手動輸入它?

任何幫助表示讚賞。由於


從延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 

再次感謝延Björnhager!

回答

6

INVALID_FILE_ATTRIBUTES定義爲-1($ ffffffff),所以檢查一下。

+0

謝謝!完美的作品! –

2

而不是在代碼中使用幻數,您應該使用正確定義的宏INVALID_FILE_ATTRIBUTES。此宏在fasm安裝的INCLUDE文件夾中的kernel32.inc中定義。您可以包括這樣

這INC文件包括 'C:\路徑\到\ FASM \ INCLUDE \相當於\ KERNEL32.INC'

,或者你可以只添加高級別包括像

包括' C:\路徑\到\ FASM \ INCLUDE \ win32a.inc」(或win32w.inc如果使用WINAPI的Unicode版本)

,或者如果您設置fasmw.ini環境節只包括值:

包括'win32a.inc'

+0

我確實包括win32a.inc,在我的所有FASM項目中實際上... 不包括KERNEL32.INC會增加我的應用程序的輸出文件的大小嗎? 編輯: 要說清楚,只有在包含win32a.inc時纔會定義INVALID_FILE_ATTRIBUTES。 非常感謝! –

+0

>>不包括KERNEL32.INC增加我的應用程序的輸出文件的大小? ---沒有,只有功能的定義。對不起,我有錯誤,我想到INVALID_HANDLE_VALUE,定義=(。INVALID_FILE_ATTRIBUTES丟失,是的。最好的解決方法是定義在文件的開始INVALID_FILE_ATTRIBUTES = -1,並避免使用幻數) –

+0

是的,我當然可以定義現在我自己知道這個價值。謝謝您的幫助! :) –