Здравствуйте! Я заходил уже на ваш форум, мне очень помогли. Огромное спасибо. Но у меня вдальнейшем случалась еще одна проблема. Ниже размещен код программы, который должен удалить все внутренности папки (C:\abc), но он удаляет в этой папки файлы и внутренности вложенный папкок, а саму папку не удаляет. Прошу помочь найти ошибку. Заранее спасибо.
| Код | .386 .model flat,stdcall option casemap:none include C:\masm615\include\kernel32.inc DeleteDirectory PROTO, lpDirectory:PTR BYTE
MAX_PATH equ 260
FILETIME STRUCT dwLowDateTime DWORD ? dwHighDateTime DWORD ? FILETIME ENDS
WIN32_FIND_DATA STRUCT dwFileAttributes DWORD ? ftCreationTime FILETIME <> ftLastAccessTime FILETIME <> ftLastWriteTime FILETIME <> nFileSizeHigh DWORD ? nFileSizeLow DWORD ? dwReserved0 DWORD ? dwReserved1 DWORD ? cFileName BYTE MAX_PATH dup(?) cAlternate BYTE 14 dup(?) WIN32_FIND_DATA ENDS
.data adress BYTE "C:\abc",0
file_attr WIN32_FIND_DATA <> fName BYTE "*.*",0 .code main PROC invoke DeleteDirectory,ADDR adress invoke ExitProcess,0 main ENDP
DeleteDirectory PROC, lpDirectory: PTR BYTE
LOCAL CurrentDir[60]:BYTE, findHandle:DWORD,cDir[20]:BYTE
invoke SetCurrentDirectory, [lpDirectory] invoke GetCurrentDirectory,60,ADDR CurrentDir invoke FindFirstFile,ADDR fName, ADDR file_attr
mov findHandle,eax invoke FindNextFile,findHandle,ADDR file_attr cmp eax,0 jz exit
poisk: invoke FindNextFile,findHandle,ADDR file_attr cmp eax,0 jz exit mov eax,file_attr.dwFileAttributes cmp eax,10h jnz ne_papka lea esi, file_attr.cFileName lea edi, cDir mov ecx, 20 cld rep movsb
invoke DeleteDirectory,ADDR file_attr.cFileName invoke SetCurrentDirectory, ADDR CurrentDir
lea edi, file_attr.cFileName lea esi, cDir mov ecx, 20 cld rep movsb
invoke RemoveDirectory, ADDR file_attr.cFileName jmp poisk ne_papka: invoke DeleteFile, ADDR file_attr.cFileName lea esi,file_attr.cFileName mov eax,0 mov ecx,5 Zap_null: mov [esi],eax add esi,4 Loop Zap_null
jmp poisk exit: ret DeleteDirectory ENDP end main
|
|