Содержание
  ДОМОЙ
  НОВОСТИ  
  IT АКАДЕМИЯ
  WAP-ВЕРСИЯ
  ФОРУМ
  БЕЗОПАСНОСТЬ
  ПРОГРАММИРОВАНИЕ
  ИНСТРУМЕНТ ВЕБМАСТЕРА
  ВСЁ ДЛЯ КПК
  СТАТЬИ NEW
  СОФТ
  ВИДЕО
  X-INFO
  ПРОКСИ ЛИСТ
  IT МУЗЫКА
  АНЕКДОТЫ
  ССЫЛКИ
  ТЕХ. ПОДДЕРЖКА
  ПРАВООБЛАДАТЕЛЯМ
  О НАС

 

Ваш IP

18.117.107.90

Человек на сайте На сайте: 632 человек(а)

Здесь могла бы
быть Ваша
РЕКЛАМА




Работа с файлами - открытие и закрытие (win api)

Итак, рассмотрим здесь функции открытия и закрытия файлов.
Для любых действий с файлом, сначала его необходимо открыть. Здесь я рассматриваю win-api функции, поэтому для открытия файла можно использовать такие функции:

CreateFile(
  lpFileName : PAnsiChar,
  dwDesiredAccess : cardinal,
  dwShareMode : cardinal,
  lpSecurityAttributes : PSecurityAttributes,
  dwCreationDistribution : cardinal,
  dwFlagsAndAttributes : cardinal,
  hTemplateFile : cardinal
) : cardinal;

Итак, функция CreateFile может и открывать файлы и создавать их (и не только файлы!).

lpFileName - имя файла - null-terminated строка (строка, признаком конца которой является символ с кодом 0). Я думаю тут всё понятно, поэтому двигаемся далее.

dwDesiredAccess - доступ к файлу - для чтения или записи, допустимые значения:

GENERIC_READ - для чтения
GENERIC_WRITE - для записи

Однако флаги можно комбинировать, GENERIC_READ or GENERIC_WRITE - откроет файл для чтения-записи.

dwShareMode - доступ к файлу во время работы с ним программы. Если поставить 0, то никакая другая программа не сможет открыть данный файл во время вашей раьоты с ним. Допустимые значения:

0 - описано выше
FILE_SHARE_DELETE (только windows nt) - можно ли удалить файл во время вашей работы с ним
FILE_SHARE_READ - можно ли его читать
FILE_SHARE_WRITE - возможна ли запись в файл, когда вы с ним работаете

lpSecurityAttributes - указатель на структуру SECURITY_ATTRIBUTES. Можно вбить просто nil.

dwCreationDistribution - флаги создания файла. Это очень интересный момент, остановимся на нём несколько подробнее. Итак, если требуется создать файл, только если его ещё нет, тогда вбивай CREATE_NEW, если требуется создать файл, при этом если файл с таким именем уже будет, то его перезаписать - вбивай CREATE_ALWAYS, если требуется открыть файл, только если он есть (в случае отсутствия, функция вернёт ошибку), тогда вбивай OPEN_EXISTIG, однако зачастую самым нужным оказывается значение OPEN_ALWAYS - тогда, если файл отсутствует, он будет создан, а если он уже есть, тогда файл будет открыт.

dwFlagsAndAttributes - аттрибуты создаваемого файла, в случае если файл открывается, этот параметр игнорируется. Доупустимые значения:

FILE_ATTRIBUTE_ARCHIVE - архивный
FILE_ATTRIBUTE_COMPRESSED - сжатый
FILE_ATTRIBUTE_HIDDEN - скрытый
FILE_ATTRIBUTE_NORMAL - нормальный (без аттрибутов)
FILE_ATTRIBUTE_OFFLINE - недоступен
FILE_ATTRIBUTE_READONLY - только для чтения
FILE_ATTRIBUTE_SYSTEM - системный
FILE_ATTRIBUTE_TEMPORARY - временный файл, система попытается сохранить содержимое файла в оперативной памяти для быстрого досупа к файлу

Кроме того, эти флаги можно комбинировать с другими, вот список дополнительных флагов:

FILE_FLAG_WRITE_THROUGH
FILE_FLAG_OVERLAPPED
FILE_FLAG_NO_BUFFERING
FILE_FLAG_RANDOM_ACCESS
FILE_FLAG_SEQUENTIAL_SCAN
FILE_FLAG_DELETE_ON_CLOSE
FILE_FLAG_BACKUP_SEMANTICS
FILE_FLAG_POSIX_SEMANTICS
SECURITY_ANONYMOUS
SECURITY_IDENTIFICATION
SECURITY_DELEGATION
SECURITY_CONTEXT_TRACKING
SECURITY_EFFECTIVE_ONLY

hTemplateFile - "шаблон" для файла с GENERIC_READ флагом, обычно вбивается 0.

Это была первая функция, которая используется для открытия файла, теперь перейдём к следующей функции -

OpenFile(
  lpFileName : PAnsiChar,
  lpReOpenBuff : OFSTRUCT,
  uStyle : Cardinal
) : hFile;

Функция OpenFile может открывать, удалять, ре-открывать, с помошью неё можно проверять - существует ли файл, в общем, так же имеет массу полезных вещей в себе, начнём описание:

lpFileName - параметр указывает на имя файла - null-terminated строка

lpReOpenBuff - параметр указывает на структуру OFSTRUCT (от OpenFileSTRUCT)

uStyle - самое, собственно главное, в этом процессе - флаг открытия, вот список флагов + пояснения:

OF_CREATE - создаёт новый файл, если файл с таким именем уже есть, он будет перезаписан
OF_DELETE - удаляет файл
OF_EXIST - открывает и сразу же закрывает файл, используется для проверки, есть ли такой файл
OF_PARSE - заполняет структуру OFSTRUCT, переданную во втором параметре
OF_PROMPT - если файл не найден, появляется окно с уведомлением и кнопками "retry" и "cancel"
OF_READ - открывает только для чтения
OF_READWRITE - открывает для чтения-записи
OF_REOPEN - ре-открывает файл
OF_SHARE_COMPAT - открывает файл в MS-DOS-based файловых системых
OF_SHARE_DENY_NONE - открывает файл в MS-DOS-based файловых системых, при этом другим приложениям в доступе к файлу будет отказано
OF_SHARE_DENY_READ - открывает файл в MS-DOS-based файловых системых, при этом другие приложения смогут только записывать в открытый файл
OF_SHARE_DENY_WRITE - открывает файл в MS-DOS-based файловых системых, при этом другие приложения смогут только читать открытый файл
OF_SHARE_EXCLUSIVE - открывает файл в MS-DOS-based файловых системых, открывает read-write доступ к открываемому файлу
OF_VERIFY - проверяет, когда файл был открыт в последний раз, используется только в файлах с аттрибутом read-only
OF_WRITE - открытие файла только для записи

О, да! Наконец-то мы приступаем к кодингу, хватай примеры с пояснениями:

Листинг 1.0 - открытие файла с использованием CreateFile
procedure TForm1.Button1Click(Sender: TObject);
 var
  fl : hFile;
begin
 fl := CreateFile('cool.txt', // имя файла
   GENERIC_READ or GENERIC_WRITE, // тип доступа к нему
   FILE_SHARE_WRITE or FILE_SHARE_READ, // тип доступа для других приложений
   nil, // указатель на структуру SECURITY_ATTRIBUTES - нафиг
   OPEN_ALWAYS, // если файла нет, то создать и открыть
   FILE_ATTRIBUTE_NORMAL, // обычный файл
   0); //темплейт файла - нафиг

   CloseHandle(fl);
end;

Итак, в примере, создаётся файл cool.txt. Потом файл сразу же закрывается. А вот закрывается он функцией -

CloseHandle(
hObject : Cardinal
);

Её я ещё не описывал, но и описывать в ней собственно нечего - единственным параметром, который ей передаётся, мы передаём обьект (дескриптор) который надо закрыть. В нашем случае мы передаём ему дескриптор файла fl.

Идём далее - привожу пример, в котором файл создаётся функцией OpenFile.

Листинг 1.1 - открытие файла с использованием OpenFile
procedure TForm1.Button1Click(Sender: TObject);
 var
   fl : hFile;
   ofs : OFSTRUCT;
begin
 fl := OpenFile('cool.txt',
   ofs,
   OF_CREATE or OF_WRITE);

 CloseHandle(fl);
end;

В примере так же создаётся файл cool.txt, и при этом открывается для записи. Ну вот, собственно и всё, если нормально вник во всё - читай следующий раздел.

SLAyer

Другие статьи

По всем вопросам и предложениям по сайту пишите на info@comp-info.ru
 


Содержание
  ДОМОЙ
  НОВОСТИ  
  IT АКАДЕМИЯ
  WAP-ВЕРСИЯ
  ФОРУМ
  БЕЗОПАСНОСТЬ
  ПРОГРАММИРОВАНИЕ
  ИНСТРУМЕНТ ВЕБМАСТЕРА
  ВСЁ ДЛЯ КПК
  СТАТЬИ NEW
  СОФТ
  ВИДЕО
  X-INFO
  ПРОКСИ ЛИСТ
  IT МУЗЫКА
  АНЕКДОТЫ
  ССЫЛКИ
  ТЕХ. ПОДДЕРЖКА
  ПРАВООБЛАДАТЕЛЯМ
  О НАС

 
Поиск по сайту
Утилиты

  Сниффер
  Лог сниффера
  MD5 и Base64
  Декодирование MD5 NEW
 Перекодировщик
  Проверить прокси
  Проверка анонимности
  Генерация пароля
  Скрипт определения IP
  Поиск информации
   Проверить IP (Whois)
   Узнать скорость закачки
   Добавить свой сайт в поисковые системы>
   Подсветка php-кода

ПОЛЕЗНАЯ ИНФОРМАЦИЯ:
  Список национальных доменных имен
  Компьютерные термины
  Смайлики
   Аналоги Win-программ в Linux
   Коды ответа HTTP сервера
   Записки невесты программиста

Здесь могла бы
быть Ваша
РЕКЛАМА





Права на содержащиеся на сайте материалы принадлежат авторам материалов и владельцам проекта.
Copyright Комп-Инфо.ру © 2005