Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_OOP_Delphi.docx
Скачиваний:
54
Добавлен:
31.05.2015
Размер:
2.39 Mб
Скачать

10. Функции работы с файлами

Паскалевский метод доступа к файлам:

http://www.delphisources.ru/pages/faq/base/all_about_files.html

1) Определяем файловую переменную:

var

f: TextFile;

2) Ассоциируем ее:

AssignFile(F, 'c:\MyFile.txt');

3) Теперь надо этот файл открыть, есть 3 варианта:

  1. файла нет или он должен быть перезаписан, открытие для записи: Rewrite(f)

  2. файл есть и его надо открыть для чтения (с первой строки): Reset(f)

  3. файл есть и его надо открыть для дописывания строк в конец: Append(f)

4) В конце работы открытый файл нужно закрыть:

CloseFile(f);

Чтение предварительно открытого файла:

ReadLn(f, s) - будет прочитана текущая строка и позиция чтения переведена на следующую позицию.

А как прочитать весь файл?

while not eof(f) do

begin

ReadLn(f, s);

{здесь делаем что-то с прочитанной строкой}

end;

Теперь как писать в текстовый файл:

Запись целой строки:

Writeln(f,s);

Некоторые функции для работы с файлами модуля SysUtils:

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

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

Допустимы следующие режимы открытия файлов:

fmOpenRead = $0000;

fmOpenWrite = $0001;

fmOpenReadWrite = $0002;

function FileSeek(Handle, Offset, Origin: Integer): Integer;

Позиционирует файл с дескриптором Handle в новое положение. При

Origin=0 (позиционируем от начала файла)

Origin=1 (позиционируем от текущей позиции)

Origin=2 (позиционируем от конца файла).

Возвращает новое положение либо -1 при ошибке.

function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer;

Записывает в файл с дескриптором Handle Count байт из Buffer.

Пример записи в конец файла:

var

FileHandle : Integer;

st:string;

FileHandle := FileOpen('d:\1.txt', fmOpenWrite);

st:='hello korolev HELLO!!!!!! '+#13+'12345';

FileSeek(FileHandle,0,2);

FileWrite(FileHandle,st[1],length(st));

function FileCreate(const FileName: string): Integer;

Создает файл с именем FileName. Возвращает дескриптор созданного файла (как и function FileOpen).

function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer;

Считывает из файла с дескриптором Handle Count байт в Buffer. Возвращает число прочитанных байт или -1 при ошибке.

Пример:

var

FileHandle: Integer;

iFileLength: Integer;

iBytesRead: Integer;

Buffer: PChar;

i: Integer

FileHandle := FileOpen('d:\1.txt', fmOpenRead);

iFileLength := FileSeek(FileHandle,0,2);

FileSeek(FileHandle,0,0);

Buffer := PChar(AllocMem(iFileLength + 1));

iBytesRead := FileRead(FileHandle, Buffer^, iFileLength);

writeln('read from file:');

for i := 0 to iBytesRead-1 do

begin

write(Buffer[i]);

end;

{ // можно и так

st2:=StrPas(Buffer);

writeln('read from file=',st2);

}

FileClose(FileHandle);

function AllocMem(Size: Cardinal): Pointer;

Выделяет блок памяти размером Size и возвращает указатель на него.

Cardinal 0..4294967295 unsigned 32-bit

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

Ищет первый файл, удовлетворяющий маске поиска, заданной в Path и с атрибутами Attr. В случае успеха заполняет запись TSearchRec и возвращает 0, иначе возвращает код ошибки.

type

TSearchRec = record

Time: Integer;

Size: Integer;

Attr: Integer;

Name: TFileName;

ExcludeAttr: Integer;

FindHandle: THandle;

FindData: TWin32FindData;

end;

Constant Value Description

faReadOnly 1 Read-only files

faHidden 2 Hidden files

faSysFile 4 System files

faVolumeID 8 Volume ID files

faDirectory 16 Directory files

faArchive 32 Archive files

faAnyFile 71 Any file

function FindNext(var F: TSearchRec): Integer;

Продолжает процесс поиска файлов, по заданной маске. Параметр F должен быть заполнен при помощи FindFirst. Возвращает 0, если очередной файл найден, или код ошибки.

procedure FindClose(var F: TSearchRec);

Завершает процесс поиска файлов, по заданной маске.

if FindFirst('d:\*.*', faAnyFile, sr) = 0 then

begin

repeat

writeln(sr.Name);

until FindNext(sr) <> 0;

FindClose(sr);

end;

ФУНКЦИИ РАБОТЫ С ДАТОЙ И ВРЕМЕНЕМ

(стр 92)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]