- Код: Выделить всё
- assign(f, '.....');
 rewrite(f, 1);
 blockwrite(fd, buf^, size);
Но оптимально ли это?
Пишется ли это одним буфером или побайтно?
Модератор: Модераторы
assign(f, '.....');
rewrite(f, 1);
blockwrite(fd, buf^, size);
zub писал(а):Имхо лучше использовать вариант с хэндлами файлов, а не с файловыми переменными.
zub писал(а):Еще лучше наверно потоки.
...
var
fd:file;
...program Project1;
uses sysutils;
var
   fh:THandle;
   something:integer;
begin
   fh:=FileCreate('test.test');
   FileWrite(fh, something, sizeof(something));
   FileClose(fh);
end.
Снег Север писал(а):Вообще-то первые два способа доступа к файлу - это, всего лишь, обертки над TFileStream.
function THandleStream.Write(const Buffer; Count: Longint): Longint;
begin
  Result:=FileWrite (FHandle,Buffer,Count);
  If Result=-1 then Result:=0;
end;
....
constructor TFileStream.Create(const AFileName: string; Mode: Word; Rights: Cardinal);
begin
  FFileName:=AFileName;
  If (Mode and fmCreate) > 0 then
    FHandle:=FileCreate(AFileName,Mode,Rights)
  else
    FHAndle:=FileOpen(AFileName,Mode);
  If (THandle(FHandle)=feInvalidHandle) then
    If Mode=fmcreate then
      raise EFCreateError.createfmt(SFCreateError,[AFileName])
    else
      raise EFOpenError.Createfmt(SFOpenError,[AFilename]);
end;
mirk писал(а):Но оптимально ли это?
Пишется ли это одним буфером или побайтно?

var
  Stream: TFileStream;
  BufStr: TWriteBufStream;
  M: array{1..300] of byte; 
  ...
begin
  .........
  if SaveDialog1.Execute then begin 
    try
      Stream:=TFileStream.Create(SaveDialog1.FileName, fmCreate or fmOpenWrite);
      BufStr:=TWriteBufStream.Create(Stream);
      BufStr.Write(M, 300);
      Result:=false;
      finally
        BufStr.Free;
        Stream.Free;
      end;
   end;
end;mirk писал(а):Но оптимально ли это?
zub писал(а):Если выбирать из file и thandle - в последнем набор функций побогаче
zub писал(а):Если выбирать из file и thandle - в последнем емнип набор функций побогаче
mirk писал(а):Пишу в файл довольно просто:
- Код: Выделить всё
assign(f, '.....');
rewrite(f, 1);
blockwrite(fd, buf^, size);
Но оптимально ли это?
Пишется ли это одним буфером или побайтно?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1