Створення, відкриття, закриття та видалення файлу програмування, уроки і приклади

Глава 7. Робота з файлами в програмах на асемблері

Створення, відкриття, закриття та видалення файлу

Створення та відкриття файлу в Win32 проводиться однією функцією CreateFile. HANDLE CreateFi1eCLPCTSTR ipFileName, DWORD dwDesiredAccess. DWORD dwShareMode. LPSECURITY_ATTRIBUTES ipSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes. HANDLE hTemplateFile):
Параметри цієї функції мають розмір подвійного слова. Їх призначення наступне (параметри описані в порядку, зворотному їх записи в стек):

Якщо процедура повертає в регістрі ЕАХ дескриптор нового файлу. У разі невдачі функція повертає в регістрі ЕАХ значення NULL.

Якщо процедура повертає нульове значення в регістрі ЕАХ. У разі невдачі функція повертає в регістрі ЕАХ значення NULL.

Для переміщення файлу Win32 містить дві функції MoveFile і MoveFi 1 ЕЕх:
BOOL MoveFile (LPCTSTR lpExistingFileName, LPCTSTR lpNewFileNam):
BOOL MoveFileEx (LPCTSTR TpExistingFileName. LPCTSTR ipNewFileName. DWORD dwFlags):
Параметрами функції MoveFile є покажчики на ASCIIZ-рядки з іменами файлу-джерела і файлу-приймача. Функція MoveFi 1 ЕЕх володіє додатковими властивостями завдяки наявності третього параметра, який визначає особливості переміщення:

Крім цього, функція MoveFi 1 ЕЕх допускає вказівку на місці другого параметра значення NULL, тим самим моделюючи виклик функції Del eteFi I e.
При вдалому завершенні функції MoveFile і MoveFi 1 ЕЕх повертають ненульове значення в регістрі ЕАХ. У разі невдачі функції повертають в регістрі ЕАХ значення NULL.

prg07_30.asm - Win32-nporpaMMa консольного застосування для дослідження: роботи функції MoveFile (Ex) API Win32.
.
.data
TitleText db 'Переміщення файлів в Win32'.О
s_file db "p", 0, а ім'я вхідного файлу
d_file db "pi" .0: ім'я вихідного файлу
.code
.
push offset d_file
push offset s_file
call MoveFileA
cmp eax.O
jz exit: вихід в разі невдачі

Спеціальної функції для перейменування файлу немає, так як вона і не потрібна - переміщення файлу в межах одного каталогу по суті і є його перейменуванням.

Для видалення файлу застосовується функція Del eteFi I e:
BOOL DeleteFile (LPCTSTR TpFileName);
У неї єдиний параметр - покажчик на ASCIIZ-рядок з ім'ям (шляхом) файлу, що видаляється. Перед видаленням файл необхідно закрити, хоча в деяких версіях Windows це не є обов'язковим.
Якщо процедура повертає нульове значення в регістрі ЕАХ. У разі невдачі функція повертає в регістрі ЕАХ значення NULL.