Blockwrite schreibt zuviel

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Blockwrite schreibt zuviel

Beitrag von malabarista »

Ich habe den Effekt, dass beim Blockwrite, obwohl er im Beispiel nur 35 Bytes schreiben soll, tatsächlich viel mehr schreibt (ca. 4,5 kB).

Code: Alles auswählen

 
var
  buf:array[0..50] of byte;
 
  begin
  ...
  datei:='tmp.dat';
  if fileexists(datei) then deletefile(datei);
  assignfile(f,datei);
  rewrite(f);
  for j:=0 to 40 do
     begin
     buf[j]:=66;
     end;
  Blockwrite(f,buf,35, geschrieben);
  closefile(f);
  end;
 
 

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Blockwrite schreibt zuviel

Beitrag von Michl »

FPC hat eine recht gute Hilfe. Wenn du im Quelltexteditor auf "BlockWrite" gehst und <F1> drückst, dann wird die Hilfe angezeigt: "BlockWrite writes count records from buffer to the file F.A record is a block of bytes with size specified by the Rewrite or Reset statement. "

Gib einfach die Größe beim Rewrite mit, dann sollte das funktionieren:

Code: Alles auswählen

  Rewrite(f, sizeof(Byte)); 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Warf
Beiträge: 1910
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Blockwrite schreibt zuviel

Beitrag von Warf »

Was du auch machen könntest wäre:

Code: Alles auswählen

type TBuf = array[0..50] of byte; // sind 51 elemente korrekt? die zahl kommt mir etwas krumm vor
var buff: TBuf;
  f: file of TBuf;
 
...
AssignFile(f, Path);
rewrite(f);
...
write(f, buff);
closeFile(f)

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Blockwrite schreibt zuviel

Beitrag von malabarista »

Wenn ich bei rewrite eine 1 angebe, ist alles in Ordnung.

Code: Alles auswählen

 
rewrite(f,1);
 

Antworten