2015-09-30 223 views
0

我是Assembly編程的新手,我想知道如何在創建文件時檢查文件是否存在。在這個程序中,如果同名文件存在於同一個文件夾中,我期待它返回一個錯誤。但是,它只是忽略它並創建一個文件,而不管它是否存在。有人能告訴我爲什麼會出現這種情況嗎?哦,我正在使用TASM進行編譯。在彙編語言中創建文件之前檢查文件是否存在

.model tiny 
.stack 0100h 
.data 
org 01000h 

file db 65,?,64 dup(?) 
crstr1 db 'Enter file name to be created:$' 
crstr2 db 'File successfuly created!' 
db 'Press any key to continue . . .$' 
crstr3 db 'File already exists or invalid name!$' 


.code 
main: jmp begin 

begin: 
    mov ax, @data 
    mov ds, ax 
CLEAR 
GOTOXY 2,4 
DISP crstr1 
INP file 

    ;file check 
    mov cx, 3fh 
    mov dx, offset file 
    mov ah, 4eh 
    int 21h 
    je error 
    mov ah, 3ch 
    mov dx, offset file 
    mov cx, 0 
    int 21h 

    ;no error 
    CLEAR 
    GOTOXY 2,4 
    DISP crstr2 
    mov ah, 08 
    int 21h 
    jmp exit 

error: 
    mov ah,02h 
    mov dh,6 
    mov dl,4 
    int 10h 

    mov ah, 09h 
    mov dx, offset crstr3 
    int 21h 

exit: 
int 20h 
end main 
end 
+0

如果文件存在,您可以先使用'int 21h/ah = 3dh'打開文件,並在文件失敗時創建它。或者你可以嘗試使用'int 21h/ax = 4300h'來獲取文件屬性,如果該文件不存在,我預計會失敗。 – Michael

+0

@邁克爾甚至用啊= 6ch。 –

回答

0

使用jc,而不是je。進位標誌返回錯誤條件。

+0

對不起,它實際上是一個更大的程序(文件管理)的一部分,我也懶得去改變它。可悲的是,改變jc並沒有多大幫助。現在它說文件存在,即使它不存在 –

+0

@JohnKennethLee調試你的代碼。確保在int 21之前你的寄存器包含正確的信息並且真正指向文件名(也請檢查內存)。 –

相關問題