Приветствую всех гениев цифровой эпохи
На повестке дня вот такая задачка: "Используйте функцию GetOpenFileName для выбора файла. Проверить, если возраст файла не превышает 3 дней, выполните его. В противном случае вывести диалоговое окно с вопросом о удалении файла. Если пользователь пригодится, вытереть." (Внимание. Если в задании сказано использовать структуру, то она должна быть размещена в динамически выделенной памяти)
После успешного выполнения функции GetOpenFileName я хочу открыть выбранный файл. Я пробовал двумя вариантами:
1) Через функцию CreateFile(с необходимыми только для открывания и чтения файла параметрами)
2) Через функцию OpenFile
От OpenFile я отказался, так как она устаревшая.
Разобрался немного с CreateFile, но почему то регистр eax заполняется FFFFFFFF, и дебагер пишет: "Синтаксическая ошибка в имени файла, имени папки или метке тома", хотя по идеи не должен был бы(
File.inc
include WINDOWS.inc
include user32.inc
include kernel32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib comdlg32.lib
.data
Time_title db ' Ëàáîðàòîðíà ðîáîòà ¹3',0
buf db 255 dup(0)
pmem dd 0
File.asm
.386
.model flat,STDCALL
option casemap :none ;case sensitive
include Third.inc
include RADbg.inc
Mem_Alloc PROC Buf_Size:DWORD
add Buf_Size,4
invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,Buf_Size
push eax
invoke GlobalLock,eax
pop [eax]
add eax,4
ret
Mem_Alloc endp
Mem_Free PROC DATA:DWORD
mov eax,DATA
sub eax,4
mov eax,[eax]
push eax
push eax
call GlobalUnlock
call GlobalFree
ret
Mem_Free endp
.code
Begin:
call main
invoke ExitProcess,NULL
main proc
LOCAL hFile:DWORD
LOCAL ftCreate, ftLocale: FILETIME;
LOCAL stUTC, stLocal: SYSTEMTIME;
invoke Mem_Alloc, sizeof OPENFILENAME
mov pmem, eax
mov edi, pmem
assume edi: ptr OPENFILENAME
xor eax, eax
mov [edi].lStructSize, sizeof OPENFILENAME
mov [edi].lpstrFile, offset buf
mov [edi].nMaxFile, 255
invoke GetOpenFileName, edi
invoke CreateFile, addr [edi].lpstrFile, GENERIC_READ,\ ;немного разобрался
FILE_SHARE_READ, NULL, OPEN_EXISTING,\
FILE_ATTRIBUTE_NORMAL, NULL
mov hFile,eax
invoke GetFileTime, hFile, addr ftCreate, NULL, NULL
invoke FileTimeToLocalFileTime, addr ftCreate, addr ftLocale
invoke FileTimeToSystemTime, addr ftCreate, addr stUTC
jne l1
jmp l2
assume edi: dword
invoke Mem_Free, hFile
l1:
l2:
ret
main endp
end Begin