Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление внутренностей папки 
:(
    Опции темы
Бор
Дата 29.7.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.7.2006

Репутация: нет
Всего: нет



Здравствуйте! Я заходил уже на ваш форум, мне очень помогли. Огромное спасибо. Но у меня вдальнейшем случалась еще одна проблема.
Ниже размещен код программы, который должен удалить все внутренности папки (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
 
PM MAIL   Вверх
Damarus
Дата 30.8.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Бор, для простого удаления директории слишком заумно. Так проще:
Код

; @echo off
; goto make

.386
.model flat,stdcall

option casemap:none

SHFileOperationA PROTO :DWORD
ExitProcess PROTO :DWORD

includelib shell32.lib
includelib kernel32.lib

SHFILEOPSTRUCTA STRUCT
    hwnd                    DWORD   ?
    wFunc                   DWORD   ?
    pFrom                   DWORD   ?
    pTo                     DWORD   ?
    fFlags                  WORD    ?
    fAnyOperationsAborted   DWORD   ?
    hNameMappings           DWORD   ?
    lpszProgressTitle       DWORD   ?
SHFILEOPSTRUCTA ENDS

.const
FOF_NOCONFIRMATION   equ   0010h
FOF_NOCONFIRMMKDIR   equ   0200h
FOF_NOERRORUI        equ   0400h
FOF_SILENT           equ   0004h
FO_DELETE            equ   0003h

.data
Path db 'C:\abc',0

.code
main proc
    LOCAL FileOperation:SHFILEOPSTRUCTA
    
    mov FileOperation.hwnd, 0
    mov FileOperation.wFunc, FO_DELETE
    mov FileOperation.pFrom, OFFSET Path
    mov FileOperation.pTo, 0
    mov FileOperation.fFlags, FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR or \
        FOF_NOERRORUI or FOF_SILENT
    mov FileOperation.fAnyOperationsAborted, 0
    mov FileOperation.hNameMappings, 0
    mov FileOperation.lpszProgressTitle, 0
    invoke SHFileOperationA, ADDR FileOperation
    
    invoke ExitProcess, 0
main endp
end main

; :make
; ml /c /coff Bor.cmd
; link /LIBPATH:"D:\Microsoft Visual Studio 8\VC\PlatformSDK\Lib" /MACHINE:X86 /SUBSYSTEM:CONSOLE Bor.obj
; pause

PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.