Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.0.6

Озеров Валентин

Шрифт:

Buffer: TStreamBufferPointer;

BufferOffset: Integer;

ReadCount: Integer;

);

2: (

Dummy : Array[1..32] Of Char

)

End;

Function StreamFileOpen(var f : TTextRec): Integer;

Var

 Status: Integer;

Begin

 With TStreamFileRecord (F.UserData) Do Begin

GetMem(Buffer, BufferSize);

Case F.Mode Of

fmInput:

FileHandle:= FileOpen(StrPas(F.Name), fmShareDenyNone);

fmOutput:

FileHandle:= FileCreate(StrPas(F.Name));

fmInOut:

Begin

FileHandle:= FileOpen(StrPas(F.Name), fmShareDenyNone Or fmOpenWrite or fmOpenRead);

If FileHandle <> -1 Then status:= FileSeek(FileHandle, 0, 2); {
Перемещаемся в конец файла. }

F.Mode:= fmOutput;

End;

End;

BufferOffset:= 0;

ReadCount:= 0;

F.BufEnd:= 0; { В этом месте подразумеваем что мы достигли конца файла (eof). }

If FileHandle = -1 Then Result := -1

Else Result:= 0;

 End;

End;

Function StreamFileInOut(var F: TTextRec): Integer;

 Procedure Read(var Data: TStreamFileRecord);

Procedure CopyData;

Begin

While (F.BufEnd < Sizeof(F.Buffer) - 2) And (Data.BufferOffset <= Data.ReadCount) And (Data.Buffer [Data.BufferOffset] <> #10) Do Begin

F.Buffer[F.BufEnd]:= Data.Buffer^[Data.BufferOffset];

Inc(Data.BufferOffset);

Inc(F.BufEnd);

End;

If Data.Buffer [Data.BufferOffset] = #10 Then Begin

F.Buffer[F.BufEnd]:= #13;

Inc(F.BufEnd);

F.Buffer[F.BufEnd]:= #10;

Inc(F.BufEnd);

Inc(Data.BufferOffset);

End;

End;

 Begin

F.BufEnd:= 0;

F.BufPos:= 0;

F.Buffer:= '';

Repeat Begin

If (Data.ReadCount = 0) Or (Data.BufferOffset > Data.ReadCount) Then Begin

Data.BufferOffset:= 1;

Data.ReadCount:= FileRead(Data.FileHandle, Data.Buffer^, BufferSize);

End;

CopyData;

End Until (Data.ReadCount = 0) Or (F.BufEnd >= Sizeof (F.Buffer) - 2);

Result:= 0;

 End;

 Procedure Write(var Data: TStreamFileRecord);

 Var

Status: Integer;

Destination: Integer;

II: Integer;

 Begin

With TStreamFileRecord(F.UserData) Do Begin

Destination:= 0;

For II:= 0 To F.BufPos - 1 Do Begin

If F.Buffer[II] <> #13 Then Begin

Inc(Destination);

Buffer^[Destination]:= F.Buffer[II];

End;

End;

Status:= FileWrite(FileHandle, Buffer^, Destination);

F.BufPos:= 0;

Result:= 0;

End;

 End;

Begin

 Case F.Mode Of

 fmInput:

Read(TStreamFileRecord(F.UserData));

 fmOutput:

Write(TStreamFileRecord(F.UserData));

 End;

End;

Function StreamFileFlush(var F: TTextRec): Integer;

Begin

 Result:= 0;

End;

Function StreamFileClose(var F : TTextRec): Integer;

Begin

 With TStreamFileRecord(F.UserData) Do Begin

FreeMem(Buffer);

FileClose(FileHandle);

 End;

 Result:= 0;

End;

Procedure AssignStreamFile(var F: Text; Filename: String);

Begin

 With TTextRec(F) Do Begin

Mode:= fmClosed;

BufPtr:= @Buffer;

BufSize:= Sizeof(Buffer);

OpenFunc:= @StreamFileOpen;

InOutFunc:= @StreamFileInOut;

FlushFunc:= @StreamFileFlush;

CloseFunc:= @StreamFileClose;

StrPLCopy(Name, FileName, Sizeof(Name) - 1);

 End;

End;

Поделиться:
Популярные книги

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Жених из гроба

Сотис Майя
1. Гробокопательница
Фантастика:
юмористическое фэнтези
сказочная фантастика
фэнтези
5.00
рейтинг книги
Жених из гроба

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Заклятие предков

Прозоров Александр Дмитриевич
3. Ведун
Фантастика:
фэнтези
альтернативная история
8.49
рейтинг книги
Заклятие предков

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Экспансия: Сотрудничество. Том 5

Белов Артем
5. Планетарный десант
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Экспансия: Сотрудничество. Том 5

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4