Пользователь
Добро пожаловать,
Регистрация или вход
Потеряли пароль?
Ник:
Пароль:
Меню сайта
Главная
Аккаунт
Пользователи
Опросы
Поиск по сайту
Новости RSS
Форум
Отправить другу
Связаться с нами
Книги
Самоучители
Каталог софта
Исходники
Компоненты
Обработки 1С
CMS-центр
Шаблоны сайтов
Наборы иконок
Статьи и обзоры
Вопросы и ответы
Скрипты
Нетематичное
Ваше мнение
Легко ли найти нужную информацию на сайте?
Очень просто
Нахожу почти сразу
Приходится тщательно покопаться
Почти невозможно
Не нашел (лень разбираться)
Результаты
Другие опросы
Всего голосов:
591
Комментарии:
0
Наши партнеры
Статистика
Статьи и обзоры
Главная
Лучшие
Популярные
Список
Добавить
Unix-строки (чтение и запись Unix-файлов)
Данный модуль позволяет читать и записывать файлы формата Unix.
Код
unit StreamFile;
interface
Uses
SysUtils;
Procedure AssignStreamFile (var F : Text ; Filename : String);
implementation
Const
BufferSize = 128;
Type
TStreamBuffer = Array [1..High (Integer)] of Char;
TStreamBufferPointer
= ^TStreamBuffer;
TStreamFileRecord = Record
Case Integer Of
1:
(
Filehandle : Integer;
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;
end.
Разместил:
admin
| | Прочитано: 48153 | |
Смотрите также связанные новости
30.11.2024 -
Кроссворд на Delphi
30.11.2024 -
Рождение, жизнь и гибель формы
30.11.2024 -
Воспроизводим Flash-файл в своем приложении
30.11.2024 -
Работа с потоками в Delphi
30.11.2024 -
SQL-запросы в Delphi
30.11.2024 -
BlobField как Bitmap
30.11.2024 -
Запись и чтение чисел в BLOB-поле
Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста
войдите или зарегистрируйтесь
.
Внимание! Если у вас не получилось найти нужную информацию, используйте
рубрикатор
или воспользуйтесь
поиском
.
Статьи
и
обзоры
Delphi
и
TurboPascal
Unix-строки
чтение
и
запись
Unix-файлов
Данный
модуль
позволяет
читать
записывать
файлы
формата
Unix
Кодunit
StreamFile
interface
Uses
SysUtils
Procedure
AssignStreamFile
Text
Filename
String
implementation
Const
BufferSize
Type
TStreamBuffer
Array
High
Integer
Char
TStreamBufferPointer
^TStreamBuffer
TStreamFileRecord
Record
Case
Filehandle
Buffer
BufferOffset
ReadCount
Dummy
Function
StreamFileOpen
TTextRec
Status
Begin
With
UserData
GetMem
Mode
fmInput
FileHandle
FileOpen
StrPas
Name
fmShareDenyNone
fmOutput
FileCreate
fmInOut
fmOpenWrite