Пользователь
Добро пожаловать,
Регистрация или вход
Потеряли пароль?
Ник:
Пароль:
Меню сайта
Главная
Аккаунт
Пользователи
Опросы
Поиск по сайту
Новости RSS
Форум
Отправить другу
Связаться с нами
Книги
Самоучители
Каталог софта
Исходники
Компоненты
Обработки 1С
CMS-центр
Шаблоны сайтов
Наборы иконок
Статьи и обзоры
Вопросы и ответы
Скрипты
Нетематичное
Ваше мнение
Легко ли найти нужную информацию на сайте?
Очень просто
Нахожу почти сразу
Приходится тщательно покопаться
Почти невозможно
Не нашел (лень разбираться)
Результаты
Другие опросы
Всего голосов:
591
Комментарии:
0
Наши партнеры
Статистика
Статьи и обзоры
Главная
Лучшие
Популярные
Список
Добавить
Unix-строки (чтение и запись Unix-файлов)
Данный модуль позволяет читать и записывать файлы формата Unix.
Код
unit
StreamFile
;
interface
Uses
SysUtils;
Procedure Assign
StreamFile
(var F : Text ; Filename : String);
implementation
Const
BufferSize = 128;
Type
TStreamBuffer = Array [1..High (Integer)] of Char;
TStreamBufferPointer = ^TStreamBuffer;
T
StreamFile
Record = Record
Case Integer Of
1:
(
Filehandle : Integer;
Buffer : TStreamBufferPointer;
BufferOffset : Integer;
ReadCount : Integer;
);
2:
(
Dummy : Array [1 .. 32] Of Char
)
End;
Function
StreamFile
Open (var F : TTextRec) : Integer;
Var
Status : Integer;
Begin
With T
StreamFile
Record (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
StreamFile
InOut (var F : TTextRec) : Integer;
Procedure Read (var Data : T
StreamFile
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 := 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 : T
StreamFile
Record);
Var
Status : Integer;
Destination : Integer;
II : Integer;
Begin
With T
StreamFile
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 := FileWrite (FileHandle, Buffer^, Destination);
F.BufPos := 0;
Result := 0;
End;
End;
Begin
Case F.Mode Of
fmInput:
Read (T
StreamFile
Record (F.UserData));
fmOutput:
Write (T
StreamFile
Record (F.UserData));
End;
End;
Function
StreamFile
Flush (var F : TTextRec) : Integer;
Begin
Result := 0;
End;
Function
StreamFile
Close (var F : TTextRec) : Integer;
Begin
With T
StreamFile
Record (F.UserData) Do
Begin
FreeMem (Buffer);
FileClose (FileHandle);
End;
Result := 0;
End;
Procedure Assign
StreamFile
(var F : Text ; Filename : String);
Begin
With TTextRec (F) Do
Begin
Mode := fmClosed;
BufPtr := @Buffer;
BufSize := Sizeof (Buffer);
OpenFunc := @
StreamFile
Open;
InOutFunc := @
StreamFile
InOut;
FlushFunc := @
StreamFile
Flush;
CloseFunc := @
StreamFile
Close;
StrPLCopy (Name, FileName, Sizeof(Name) - 1);
End;
End;
end.
Разместил:
admin
| | Прочитано: 54986 | |
Смотрите также связанные новости
05.07.2025 -
Кроссворд на Delphi
05.07.2025 -
Рождение, жизнь и гибель формы
05.07.2025 -
Воспроизводим Flash-файл в своем приложении
05.07.2025 -
Работа с потоками в Delphi
05.07.2025 -
SQL-запросы в Delphi
05.07.2025 -
BlobField как Bitmap
05.07.2025 -
Запись и чтение чисел в 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