Пользователь
Добро пожаловать,
Регистрация или вход
Потеряли пароль?
Ник:
Пароль:
Меню сайта
Главная
Аккаунт
Пользователи
Опросы
Поиск по сайту
Новости RSS
Форум
Отправить другу
Связаться с нами
Книги
Самоучители
Каталог софта
Исходники
Компоненты
Обработки 1С
CMS-центр
Шаблоны сайтов
Наборы иконок
Статьи и обзоры
Вопросы и ответы
Скрипты
Нетематичное
Ваше мнение
Легко ли найти нужную информацию на сайте?
Очень просто
Нахожу почти сразу
Приходится тщательно покопаться
Почти невозможно
Не нашел (лень разбираться)
Результаты
Другие опросы
Всего голосов:
592
Комментарии:
0
Наши партнеры
Статистика
Статьи и обзоры
Главная
Лучшие
Популярные
Список
Добавить
Unix-строки (чтение и запись Unix-файлов)
Данный модуль позволяет читать и записывать файлы формата Unix.
Код
unit Stream
File
;
interface
Uses
SysUtils;
Procedure AssignStream
File
(var F : Text ;
File
name : String);
implementation
Const
BufferSize = 128;
Type
TStreamBuffer = Array [1..High (Integer)] of Char;
TStreamBufferPointer = ^TStreamBuffer;
TStream
File
Record = Record
Case Integer Of
1:
(
File
handle : Integer;
Buffer : TStreamBufferPointer;
BufferOffset : Integer;
ReadCount : Integer;
);
2:
(
Dummy : Array [1 .. 32] Of Char
)
End;
Function Stream
File
Open (var F : TTextRec) : Integer;
Var
Status : Integer;
Begin
With TStream
File
Record (F.UserData) Do
Begin
GetMem (Buffer, BufferSize);
Case F.Mode Of
fmInput:
File
Handle :=
File
Open (StrPas (F.Name), fmShareDenyNone);
fmOutput:
File
Handle :=
File
Create (StrPas (F.Name));
fmInOut:
Begin
File
Handle :=
File
Open (StrPas (F.Name), fmShareDenyNone Or
fmOpenWrite or fmOpenRead);
If
File
Handle <> -1 Then
status :=
File
Seek (
File
Handle, 0, 2); { Перемещаемся в конец файла. }
F.Mode := fmOutput;
End;
End;
BufferOffset := 0;
ReadCount := 0;
F.BufEnd := 0; { В этом месте подразумеваем что мы достигли конца файла (eof). }
If
File
Handle = -1 Then
Result := -1
Else
Result := 0;
End;
End;
Function Stream
File
InOut (var F : TTextRec) : Integer;
Procedure Read (var Data : TStream
File
Record);
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 :=
File
Read (Data.
File
Handle, Data.Buffer^, BufferSize);
End;
CopyData;
End Until (Data.ReadCount = 0)
Or (F.BufEnd >= Sizeof (F.Buffer) - 2);
Result := 0;
End;
Procedure Write (var Data : TStream
File
Record);
Var
Status : Integer;
Destination : Integer;
II : Integer;
Begin
With TStream
File
Record (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 :=
File
Write (
File
Handle, Buffer^, Destination);
F.BufPos := 0;
Result := 0;
End;
End;
Begin
Case F.Mode Of
fmInput:
Read (TStream
File
Record (F.UserData));
fmOutput:
Write (TStream
File
Record (F.UserData));
End;
End;
Function Stream
File
Flush (var F : TTextRec) : Integer;
Begin
Result := 0;
End;
Function Stream
File
Close (var F : TTextRec) : Integer;
Begin
With TStream
File
Record (F.UserData) Do
Begin
FreeMem (Buffer);
File
Close (
File
Handle);
End;
Result := 0;
End;
Procedure AssignStream
File
(var F : Text ;
File
name : String);
Begin
With TTextRec (F) Do
Begin
Mode := fmClosed;
BufPtr := @Buffer;
BufSize := Sizeof (Buffer);
OpenFunc := @Stream
File
Open;
InOutFunc := @Stream
File
InOut;
FlushFunc := @Stream
File
Flush;
CloseFunc := @Stream
File
Close;
StrPLCopy (Name,
File
Name, Sizeof(Name) - 1);
End;
End;
end.
Разместил:
admin
| | Прочитано: 63855 | |
Смотрите также связанные новости
30.04.2026 -
Кроссворд на Delphi
30.04.2026 -
Рождение, жизнь и гибель формы
30.04.2026 -
Воспроизводим Flash-файл в своем приложении
30.04.2026 -
Работа с потоками в Delphi
30.04.2026 -
SQL-запросы в Delphi
30.04.2026 -
BlobField как Bitmap
30.04.2026 -
Запись и чтение чисел в 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