Dwuwymiarowa tablica bajtów i WriteBuffer

0

Mam dość dużą dwuwymiarową tablicę bajtów.
Chciałbym zapisać ją do pliku. Jeśli zapiszę element po elemencie to wszystko jest dobrze, ale jak wiadomo bardzo wolno i to kompletnie odpada.
Próbowałem zapisywać liniami:

var
  Buffer: array of array of byte;

...

S := TFileStream.Create('ścieżka', fmCreate);
  for i := 0 to dlugosc_pierwszego_wymiaru-1 do
  Begin
    S.WriteBuffer(Buffer[i], dlugosc_drugiego_wymiaru);
  end;
S.Free;

Ale zapisuje mi jakieś dziwne dane, nie wiadomo skąd.

0

S.WriteBuffer(Buffer, Dim1*Dim2);

0

Stream write error.
Próbowałem w drugim parametrze podać mniejszą liczbę aby spróbować chociaż kawałek tablicy zapisać i jeśli próbuję zapisać więcej niż około 150 bajtów to wtedy zwraca bład.

0

BillyBright wydaje mi się, że w Twoim kodzie powinno być

S.WriteBuffer(Buffer[i,0], dlugosc_drugiego_wymiaru);

i powinno działać.
Oczywiście pod warunkiem, że dlugosc_drugiego_wymiaru>0

0

Według tego co napisałeś to moim zdaniem zapisywałby każdy pierwszy element z drugiego wymiaru. Ale przyznam, że już lekko zgłupiałem w tym zagadnieniu i spróbowałem. Again natknąłem się na error.

0

Na pewno sprawdziłeś i nie działa?
Działać powinno ponieważ

Buffer: array of array of byte;

to nie jest dwuwymiarowa tablica w rozumieniu tablic statycznych tylko tablica tablic a buffer[i,0]

 to komórka pierwszego elementu w i-tej tablicy i tak to ma działać.
Oczywiście warunek 
```delphi
length(buffer[i])>=dlugosc_drugiego_wymiaru

musi być spełniony inaczej będzie źle.

0

Już działa. Popełniłem drobny błąd z wymiarami tablic. Wielkie dzięki za pomoc.
Pozdrawiam i skorzystam z okazji i życzę Wesołych Świąt.

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