Delphi по работе с файлами



Скачать 232.13 Kb.
Дата05.01.2017
Размер232.13 Kb.
Просмотров217
Скачиваний0
3. Компоненты Delphi по работе с файлами.
Рассмотренные способы работы с файлами, которые имеются в самых первых версиях Pascal, можно весьма эффективно использовать при создании программ.



При создании программ для Windows более корректно применять стандартные функции этой системы. Для работы с ними не требуется создавать специальные переменные файлового типа: в системе Windows каждый файл имеет уникальный цифровой идентификатор(тип Integer). По-английски он называется Handle, под, таким названием присутствует в описании многих функций.
Ни в коем случае нельзя смешивать работу с файлами, открытыми с помощью выше описанных подпрограмм Reset и Rewrite (для их обработки применяются процедуры Read,Write,BlockRead,BlockWrite), и работу с файлами, открытыми с помощью функций Windows.
3.Работа с файловой системой Windows

Файл создается с помощью функции

function FileCreate(const FileName: string): Integer;

В Windows режимы создания и открытия файла различаются.

Функция возвращает идентификатор файла (целое положительное число) или значение -1, если создать файл не удалось. Значение -1 обозначает ошибку для большинства функций Windows. Параметр FileName содержит имя файла, возможно, вместе с полным путем поиска.

Открытие файла выполняется функцией

function FileOpen(const FileName: string; Mode : LongWord) : Integer;

Режим открытия определяется параметром Mode. Чаще всего применяется одно из трех следующих значений:



  • fmOpenRead — открытие только на запись;

  • fmOpenWrite — открытие только на чтение;

  • fmOpenReadWrite — открытие и на запись, и на чтение (режим изменения файла).

Функции ввода и вывода данных напоминают функции BlockRead/BlockWrite. Чтение данных:

function FileRead(Handle: Integer;

var Buffer;

Count: Integer): Integer;

Параметр Count указывает число считываемых байтов, параметр Buffer — это переменная, в которую эти байты записываются. Как правило, в качестве такой переменной выступает массив из элементов типа Char или Byte. Аналогично выглядит и функция записи данных:

function FileWrite(Handle: Integer;

const Buffer; Count: Integer): Integer;

Данные для записи содержатся в параметре Buffer. Параметр Соunt задает число записываемых байтов. Закрытие файла происходит с помощью процедуры

procedure FileClose (Handle : Integer);

Следующий пример создает новый файл и записывает в него содержимое текстовой строки.

var FileHandle: Integer;

S: String;

begin

S := 'текстовая строка';

FileHandle : = FileCreate('С:\TMP\S.TXT') ;

FileWrite(FileHandle, S, SizeOf(S));



FileClose(FileHandle);

end;
При использовании средств Windows применяется функция Seek(для произвольной установки текущей позиции)
Function FileSeek(Handle, Ofset, Origin: Integer): Integer;

3.1.Компоненты страницы Dialogs
В состав Windows входит ряд типовых диалоговых окон, таких как окно выбора загружаемого файла, выбора шрифта, настройки принтера и т. д. В Delphi реализованы классы, объекты которых дают программисту удобные способы создания и использования таких окон.

Работа со стандартными диалоговыми окнами осуществляется в три этапа.

Вначале на форму помещается соответствующий компонент и осуществляется настройка его свойств (следует заметить, что собственно компонент не виден в момент работы программы, видно лишь создаваемое им стандартное окно). Настройка свойств может проходить как на этапе конструирования, так и в ходе прогона программы.

На втором этапе осуществляется вызов стандартного для классов диалоговых окон метода Execute, который создает и показывает на экране диалоговое окно. Вызов этого метода обычно располагается внутри обработчика какого-либо события. Например, обработчик выбора в меню команды Открыть файл может вызвать метод Execute компонента TOpenDiaiog, обработчик щелчка на кнопке Сохранить панели инструментов может вызвать такой же метод компонента TSaveDiaiog и т. д. Только после обращения к методу Execute на экране появляется соответствующее диалоговое окно. Это окно является модальным, поэтому сразу после обращения к методу Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute — логическая функция, она возвращает в программу значение True, если результат диалога с пользователем был успешным.

Проанализировав результат вызова метода Execute, программа может выполнить третий этап — использовать введенные с помощью диалогового окна данные — имя файла, параметры принтера, выбранный шрифт и т. д.
На странице Dialogs расположен ряд невизуальных компонентов, позволяющих использовать в программе стандартные диалоговые окна Windows, например окна выбора и сохранения файлов или изображений, окна выбора цвета и шрифта, окно настройки принтера и другие.


  • OpenDiaLog — окно открытия файла. Реализует стандартное диалоговое окно Открыть файл. Имеется во всех версиях Delphi;

  • SaveDialog — окно сохранения файла. Реализует стандартное диалоговое окно Сохранить файл. Имеется во всех версиях Delphi;

  • OpenPictureDialog — окно открытия изображения. Реализует специальное окно выбора графических файлов с возможностью предварительного просмотра изображений. Впервые введен в версии 3;

  • SavePictureDialog — окно сохранения изображений. Реализует специальное окно сохранения графических файлов с возможностью предварительного просмотра рисунков. Впервые введен в версии 3;

  • FontDialog — окно выбора шрифта. Реализует стандартное диалоговое окно выбора шрифта. Имеется во всех версиях Delphi;

  • CoiorDiaLog — окно выбора цвета. Реализует стандартное диалоговое окно выбора цвета. Имеется во всех версиях Delphi;

  • PrintDialog — окно настройки параметров печати. Реализует стандартное диалоговое окно выбора параметров для печати документа. Имеется во всех версиях Delphi;

  • PrinterSetupDialog — окно настройки параметров принтера. Реализует стандартное диалоговое окно для настройки печатающего устройства. Имеется во всех версиях Delphi;

  • FindDialog — окно поиска. Реализует стандартное диалоговое окно поиска текстового фрагмента. Имеется во всех версиях Delphi;

  • ReplaceDiaiog — окно поиска и замены. Реализует стандартное диалоговое окно поиска и замены текстового фрагмента. Имеется во всех версиях Delphi.



Компоненты TOpenDialog и TSaveDialog имеют идентичные свойства и поэтому рассматриваются вместе. Пример диалогового окна TOpenDialog показан на рис. 7.

c:\docume~1\m@shk@ra\locals~1\temp\finereader11\media\image1.jpeg




Рис. 7. Стандартное окно TOpenDialog

Свойство FileName: string содержит путь поиска и выбранный файл при успешном завершении диалога с пользователем. Программа может использовать это свойство для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog). Пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists, или использовать механизм обработки исключительных ситуаций.

Свойство Filter: string используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью специального редактора на этапе конструирования формы или программно. Для доступа к редактору достаточно щелкнуть на кнопке в строке свойства Filter окна инспектора объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы вертикальной черты (|) служат для разделения фильтров, а также для отделения описания фильтруемых файлов от соответствующей маски выбора. Например, следующий оператор задает две маски для отбора файлов с расширениями pas и txt:

OpenDialog1.Filter := 'Текстовые файлы|*.txt|Файлы Паскаля|*.pas';

Установить начальный каталог позволяет свойство InitialDir: string. Например:

OpenDialog1.InitialDir := 'c:\program files\borland\delphi6\source';

С помощью свойства DefaultExt: string формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется разделительная точка и содержимое этого свойства.

Настройка диалогового окна может варьироваться с помощью следующего свойства:

type TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton, ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks, ofEnablelncludeNotify, ofEnableSizing, ofDontAddToRecent, ofForceShowHidden);


TOpenOptions = set of TOpenOption;
Из множества значений указанного свойства наиболее часто используются:

  • of Readonly — устанавливает флажок Только чтение;

  • ofHideReadOnly — скрывает флажок Только чтение;

  • ofShowHelpвключает в окно кнопку Справка;


Если разрешен множественный выбор, доступ к выбранным именам можно

получить в свойстве Files: Strings.

Инструкцию по использованию компонент страницы диалог рассматриваем на примере SaveDialog.
Диалог сохранения файлов — компонента SaveDialogimage2

(инструкция по использованию)

Рис. 8. Диалоговое окно сохранения файла

Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, — FileName. Значение этого свойства можно задать и перед обращением к диалогу. Тогда оно появится в диалоге как значение по умолчанию в окне Имя файла (см. рис. 8). Типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла (рис. 8), задаются свойством Filter. В процессе проектирования это свойство проще всего задать с помощью редактора фильтров, который вызывается нажатием кнопки с многоточием около имени этого свойства в Инспекторе Объектов. При этом открывается окно редактора, вид которого представлен на рис. 9. В его левой панели Filter Name вы записываете тот текст, который увидит пользователь в выпадающем списке Тип файла диалога. А в правой панели Filter записываются разделенные точками с запятой шаблоны фильтра. В примере рис. 9 задано два фильтра: текстовых файлов с расширениями .txt и .doc и любых файлов с шаблоном *.*.image3

Рис. 9. Окно Редактора фильтров

После выхода из окна редактирования фильтров заданные вами шаблоны появятся в свойстве Filter в виде строки вида:

текстовые (*.txt, *.doc)|* . txt; *.doc|Bce файлы |*.*

В этой строке тексты и шаблоны разделяются вертикальными линиями. В аналогичном виде, если требуется, можно задавать свойство Filter программно во время выполнения приложения.

Свойство Filterlndex определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение Filterlndex = 1 задает по умолчанию первый фильтр.

Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения. Свойство DefaultExt определяет значение расширения файла по умолчанию. Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если же задать значение DefaultExt, то пользователь может писать в диалоге имя без расширения. В этом случае будет принято заданное расширение. Свойство Title позволяет вам задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе.image4

Рис. 10. Диалог при включенной опции ofOldStyleDialog и выключенной опции ofHideReadOnly

Пример использования диалога SaveDialog. Пусть ваше приложение включает окно редактирования Memo1, в которое по команде меню Открыть вы хотите загружать текстовый файл, а после каких-то изменений, сделанных пользователем, — сохранять по команде Сохранить текст в том же файле, а по команде Сохранить как... — в файле с другим именем.

Введите на форму компоненты — диалог SaveDialog. Предположим, что вы оставили имя по умолчанию — SaveDialog1. Чтобы знать под каким именем сохранится файл, вы можете определить для этого имени переменную, назвав ее, например, FName:

Обработка команды Сохранить как... выполняется операторами:

SaveDialog1.FileName := FName;

if SaveDialog1.Execute then

begin

FName := SaveDialog1.FileName;

Memo1.Lines.SaveToFile(FName);

end;

Первый из этих операторов присваивает свойству FileName компонента SaveDialog1 запомненное имя файла. Это имя по умолчанию будет предложено пользователю при открытии диалога Сохранить как.... Следующий оператор открывает диалог и, если пользователь выбрал в нем файл, запоминает новое имя файла и сохраняет в файле с этим именем текст компонента Memo1.




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


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал