Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Атрибути файлу. Пошук файлу




Ще одна часто виконувана з файлом операція — пошук файлів в заданому каталозі. Для організації пошуку і відбору файлів використовуються спеціальні процедури, а також структура, в якій зберігаються результати пошуку.

Безпосередньо для пошуку файлів використовуються функції FindFirst і FindNext.

Функція

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;

знаходить перший файл, заданий повним маршрутом Path і параметрами Attr Властивість Attr може містити комбінацію наступних прапорів-значень:

· faReadOnly — тільки для читання;

· faDirectory — каталог;

· faHidden — прихований;

· faArchive — архівний;

· faSysFile — системний;

· faAnyFile — будь-який.

Якщо заданий файл знайдений, функція повертає 0, інакше — код помилки Windows. Параметри знайденого файлу повертаються в записи F типу TSearchRec.

Функція

function FindNext(var F: TSearchRec): Integer;

застосовується для повторного пошуку наступного файлу, що задовольняє критерію пошуку. При цьому використовуються ті параметри пошуку, які задані останнім викликом функції FindFirst. У разі вдалого пошуку повертається 0.

Для звільнення ресурсів, виділених для виконання пошуку, застосовується функція:

procedure FindClose(var F: TSearchRec);

Потоки

Для організації обміну даними в застосуваннях використовуються спеціальні об'єкти — потоки, які не тільки зберігають інформацію під час виконання застосування, але і надають розробникові набір стандартних властивостей і методів для управління даними.

Потоки — дуже вдалий засіб для уніфікації введення/виводу для різних носіїв. Потоками є спеціальні об'єкти-спадкоємці абстрактного класу Tstream. Сам Tstream "уміє" відкриватися, читати, писати, змінювати поточне положення і закриватися. Оскільки для різних носіїв ці речі відбуваються по-різному, конкретні аспекти реалізовані в його нащадках. Найчастіше використовуються потоки для роботи з файлами на диску і пам'яттю.

Багато класів VCL мають уніфіковані методи LoadFromstream і saveTostream, які забезпечують обмін даними з потоками. Від того, з яким фізичним носієм працює потік, залежить місце зберігання даних.

Базові класи TStream і THandleStream

У основі ієрархії класів потоків лежить клас TStream. Він забезпечує виконання основних операцій потоку безвідносно до реального носія інформації. Основними з них є читання і запис даних.

Клас TStream породжений безпосередньо від класу TObject.

Потоки також грають важливу роль в читанні/записі компонентів з файлів ресурсів (DFM). Велика група методів забезпечує взаємодію компоненту і потоку, читання властивостей компоненту з ресурсу і запис значень властивостей в ресурс.

Таблиця 3. Властивості і методи класу Tstream

Оголошення Опис
property Position: Longint; Визначає поточну позицію в потоці
property Size: Longint; Визначає розмір потоку в байтах

Отже, в основі операцій прочитування і запису даних в потоці лежать методи Read і Write. Саме вони викликаються для реального виконання операції усередині методів ReadBuffer І WriteBuffer, ReadComponent І WriteComponent. Оскільки клас TStream є абстрактним, то методи Read і Write також є абстрактними.

Для створення потоку використовується конструктор

constructor Create(AHandle: Integer);

у параметрі якого передається дескриптор. Згодом доступ до дескриптора здійснюється через властивість:

property Handle: Integer;

Клас TFileStream

Клас TFileStream дозволяє створити потік для роботи з файлами. При цьому потік працює з файлом без урахування типу що зберігаються в нім даних (див. вищий).

Повне ім'я файлу задається в параметрі FileName при створенні потоку:

constructor Createfconst FileName: string; Mode: Word);

Параметр Mode визначає режим роботи з файлом. Він складається з прапорів режиму відкриття:

· fmCreate — файл створюється;

· fmOpenRead — файл відкривається для читання;

· fmOpenWrite — файл відкривається для запису;

· fmOpenReadWrite — файл відкривається для читання і запису.

Клас TMemoryStream

Клас TMemoryStream забезпечує збереження даних в адресному просторі. При цьому методи доступу до цих даних залишаються тими ж, що і при роботі з файловими потоками. Це дозволяє використовувати адресний простір для зберігання проміжних результатів роботи програми, а також за допомогою стандартних методів здійснювати обмін даними між пам'яттю і іншими фізичними носіями.

Властивість

property Memory: Pointer;

визначає область пам'яті, відведену для зберігання даних потоку. Зміна розміру відведеній пам'яті здійснюється методом

procedure SetSize(NewSize: Longint); override;

Для очищення пам'яті потоку використовується метод

procedure Clear;

Читання/запис даних в пам'ять виконується звичними методами Read і Write.

Також запис даних в пам'ять може здійснюватися методами:

· procedure LoadFromFile(const FileName: string); — з файлу;

· procedure LoadFromStream(Stream: TStream); — з іншого потоку.

Додатково можна використовувати методи запису даних у файл або потік:

procedure SaveToFile(const FileName: string);

procedure SaveToStream(Stream: TStream);

Клас TStringStream

Оскільки строкові константи і змінні широко застосовуються при розробці програм, то для зручності роботи з ними створений спеціальний клас TStringStream. Він забезпечує зберігання рядка і доступ до неї під час виконання застосування.

Він володіє стандартним для потоків набором властивостей і методів, додаючи до них ще декілька, що спрощують використання рядків.

Властивість тільки для читання

property DataString: string;

забезпечує доступ до рядка, що зберігається.

Методи

function Read(var Buffer; Count: Longint): Longint; override;

і

function Write(const Buffer; Count: Longint): Longint; override;

реалізують звичайний для потоків спосіб читання і запису рядка для довільної змінної Buffer.

Метод

function ReadString(Count: Longint): string;

забезпечує читання count байтів рядка потоку, починаючи з поточної позиції.

Метод

procedure WriteString(const AString: string);

дописує до рядка рядок AString, починаючи з поточної позиції.

При роботі з файлами і потоками використовуються додаткові класи виняткових ситуацій.

Контрольні запитання

1. Дати визначення типам файлів**

2. Як відбувається робота с файлами та каталогами.***

3. Дати визначення потокам**

4. Базові класи TStream і ThandleStream***

5. Який клас створює потік для роботи з файлами****

6. Що забезпечує клас TMemoryStream та його властивості***

7. З якою метою створений спеціальний клас TstringStream***

 

Література:

  1. Архангельский А.Я. Программирование в Delphi 7, М.,: ООО «Бином-Пресс», 2003 г. – 1152 с.
  2. Дарахвелидзе П. Г., Марков Е. П. Программирование в Delphi 7. — СПб.: БХВ-Петербург, 2003. — 784 с: ил.
  3. Колосов С.В. Программирование в среде Delphi., - Мн.: БГУИР, 2005, - 164 с.
  4. Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Об'ектно-ориентированное программирование: Учеб. Для вузов / Под ред. Г.С.Ивановой. – М.: Изд-во МГТУ им. Н.Э.Баумана, 2001 – 320с.
  5. Пестриков В.М., Маслобоев А.Н., Delphi на примерах. – СПб.: БХВ – Петербург, 2005. 496 с.




Поделиться с друзьями:


Дата добавления: 2016-09-03; Мы поможем в написании ваших работ!; просмотров: 262 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Большинство людей упускают появившуюся возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © Томас Эдисон
==> читать все изречения...

2549 - | 2213 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.