Воскресенье
02.02.2025
16:56
Форма входа
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    OPEN SOURCE PROJECT

    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Проблемы с удалением файла
    andXreiДата: Воскресенье, 22.03.2009, 18:41 | Сообщение # 1
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    Имеется исходник :

    Code
    include 'win32ax.inc'
    .data
    Caption db 'Информация',0
    Text  db 'Создадим файл TXT в C:\',0
    Text2 db 'Создадим папку В C:\',0
    Text3 db 'Скопируем файл в папку',0
    Text4 db 'удалим файл в C:\',0
    ;----------------------------------------
    lpszFileName db 'C:\TEXT.txt',0
    ipPachName db 'C:\Folder',0

    lpExistingFileName db 'C:\TEXT.txt',0
    lpNewFileName db 'C:\Folder\TEXT.txt',0

    lpFileName  db 'C:\TEXT.txt',0

    .code
    start:
    ;--------------------------------
    push MB_OK
    push Caption
    push Text
    push 0                  ;Создание файла
    call [MessageBox]

    push 0
    push lpszFileName
    call [_lcreat]
    ;----------------------------------
    push MB_OK
    push Caption
    push Text2
    push 0
    call [MessageBox]       ;Создание папки

    push 0
    push ipPachName
    call [CreateDirectory]
    ;----------------------------------
    push MB_OK
    push Caption
    push Text3
    push 0
    call [MessageBox]           ;Копирование файла

    push lpNewFileName
    push lpExistingFileName
    call [CopyFile]
    ;-----------------------------------------
    push MB_OK
    push Caption
    push Text4              ; Удаление файла   
    push 0
    call [MessageBox]

    push 0
    push lpszFileName
    call [DeleteFile]

    push 0
    call [ExitProcess]
    .end start    

    Все работает только не удаляет файл
    А так удаляет:

    Code
    include 'win32ax.inc'
    .data
    lpFileName db 'C:\TEXT.txt',0
       Caption db 'Информация',0
       Text4 db 'удалим файл ',0
    .code
    start:

    push MB_OK
    push Caption
    push Text4
    push 0
    call [MessageBox]

    push 0
    push lpFileName
    call [DeleteFile]

    push 0
    call [ExitProcess]
    .end start
                     

    Почему в чем причина>? Мож что то в секции данных не так?
    Поисните!


    Сообщение отредактировал andXrei - Воскресенье, 22.03.2009, 18:42
     
    fasmДата: Воскресенье, 22.03.2009, 22:47 | Сообщение # 2
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    Дело в том, что вы уже используете файл, т.к. вы его создали, получается что вы его и открыли (получили хендл файла).
    Code

    include '%fasminc%\win32ax.inc'
    .data  
    Caption db 'Информация',0  
    Text  db 'Создадим файл TXT в C:\',0  
    Text2 db 'Создадим папку В C:\',0  
    Text3 db 'Скопируем файл в папку',0  
    Text4 db 'удалим файл в C:\',0  
    ;---------------------------------------
    lpFileName      db 'C:\TEXT.txt',0
    lpNewFileName   db 'C:\Folder\TEXT.txt',0
    ipPachName      db 'C:\Folder',0

    .code  
    start:  
    ;--------------------------------  
    push MB_OK  
    push Caption  
    push Text  
    push 0                  ;Создание файла  
    call [MessageBox]  

    push 0  
    push lpFileName
    call [_lcreat]
    mov  ebx, eax           ; Сохраняем Handle в ebx
    ;----------------------------------  
    push MB_OK  
    push Caption  
    push Text2  
    push 0  
    call [MessageBox]       ;Создание папки  

    push 0  
    push ipPachName  
    call [CreateDirectory]  
    ;----------------------------------  
    push MB_OK  
    push Caption  
    push Text3  
    push 0  
    call [MessageBox]           ;Копирование файла  

    push lpNewFileName  
    push lpFileName
    call [CopyFile]  
    ;-----------------------------------------  
    push MB_OK  
    push Caption  
    push Text4              ; Удаление файла    
    push 0  
    call [MessageBox]  

    push ebx                ; помещаем указатель в стек
    call [CloseHandle]      ; закрываем файл
    push lpFileName
    call [DeleteFile]       ; Удаляем

    push 0  
    call [ExitProcess]  
    .end start                    
     
    andXreiДата: Понедельник, 23.03.2009, 10:01 | Сообщение # 3
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    Quote (fasm)
    mov ebx, eax

    Получается хэндл храниться в регисте eax?? И для чего его сохранять в ebx??
     
    fasmДата: Понедельник, 23.03.2009, 11:13 | Сообщение # 4
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    При вызове любой функции изменяется регистр eax, т.е. в него записывается результат выполнения функции, для _lcreat возвращаемое значение является хендлом файла...
     
    andXreiДата: Понедельник, 23.03.2009, 11:38 | Сообщение # 5
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    А для чего сохранять хэндл в ebx??
     
    fasmДата: Понедельник, 23.03.2009, 17:26 | Сообщение # 6
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    Потому что функция MessageBox установит свое значение в eax, Как ты закроешь файл по указателю на него, если ты его потеряешь? Вот и получается ошибка от того, что ты не закрываешь файл перед удалением...
     
    • Страница 1 из 1
    • 1
    Поиск: