Plik o okreslonym rozmiarze

0

Witam.Ma ktos pojecie jak wygenerowac w Delphi plik o zadanym rozmiarze?(np 1,5GB zawartosc pliku moze byc dowolna)Czy jest na to jakis sposob,bo na razie spotkalem sie tylko z takim rozwiazaniem zeby zrobic plik tekstowy z kilkoma milionami linii tekstu ale wtedy przecież nie kontroluje rozmiaru tego pliku a mi jest potrzebne takie cos zeby rozmiar był jak najbardziej zblizony do zadanego

A tak przy okazji to zycze Wszystkim forumowiczom Wesołych Swiat

0

Wpisujesz tyle bajtów tekstu, ile Ci potrzeba. Jak nie możesz kontrolować?

0
var
 Buf :Pointer;
 Plik :file;

begin
 AssignFile(Plik, 'Nazwa');
 GetMem(Buf, ile_potrzebujesz);
 BlockWrite(Plik, Buf, ile_potrzebujesz);
 CloseFile(Plik);
end;
0
var fi:file of byte; b:byte;
begin
  assign(fi, 'nazwa'); rewrite(fi);
  seek(fi,1234-1);
  write(fi, b);
  close(fi)
end.
0

Zrobile tak i to nie dziala

var
 Buf :Pointer;
 Plik :file;

begin
 AssignFile(Plik, 'C:\mojplik');
 GetMem(Buf,1024*1024);
 BlockWrite(Plik, Buf, 1024*1024);
 CloseFile(Plik);
end;
0

Po pierwsze, trzebaby wcześniej ten plik utworzyć.
Dwa, do podania do pliku zawartości bufora to trzeba by go wcześniej wyłuskać [green]
Jak wielkosc bufora miałem na 1024*1024 to nie działało.

var
 Buf :Pointer;
 Plik :file;
 a:integer;
begin
 AssignFile(Plik, 'j:\mojplik.tes');
 GetMem(Buf,1024);
 Rewrite(Plik,1);
 for a:=1 to 1024 do
  BlockWrite(Plik, Buf^, 1024);
 CloseFile(Plik);
 FreeMem(Buf,1024);
end;

Generuje ładny gigowy pliczek.

Edytka:

Chociaż po zastanowieniu to wcale nie trzeba alokować pamięci, wystarczy otworzyć do obróbki na większych paczkach.

var
 Buf :byte;
 Plik :file;
 a:integer;
begin
 AssignFile(Plik, 'j:\mojplik.tes');
 Rewrite(Plik,1024);
 for a:=1 to 1024 do
 BlockWrite(Plik, Buf, 1);
 CloseFile(Plik);
end;
0

Profesorze - jak pokazał magister, wystarczy zapisać jeden bajt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1