TFileStream - rownolegly zapis...

0

Witam

tworze sobie dwa strumienie (TFileStream) kozystajace z tego samego pliku (z atrybutem fmShareDenyNone)

Czy jesli do jednego strumienia zapisze jakies dane to czy beda onedostepne w drugim?
Czy musze wykonac jakies operacje na drugim strumieniu zeby sie dostac do nowo zapisanych danych?

0

na 99% trzeba zamknąć i otworzyć ponownie strumień, który czyta

0

A mnie się wydaje, że to będzie działało na dwóch jednokrotnie otwartych strumeiniach. Ewentualnie po zapisie jednego strumienia f1 trzeba dac

FlushFileBuffers(f1.Handle);

i zamykanie i otwieranie ponowne nie powinno być potrzebne by drugi strumeiń widział zmienione przez pierwszy strumień dane.

0

A oto i rozwiazanie problemu

procedure TForm1.Button1Click(Sender: TObject);
var tab: array[1..10] of integer;
    S1,S2: TFileStream;
begin
  S1 := TFileStream.Create('Test.dat',fmShareDenyNone+fmOpenReadWrite);
  S2 := TFileStream.Create('Test.dat',fmShareDenyNone+fmOpenReadWrite);
  Showmessage('S1: '+IntToStr(S1.size)+#13+'S2: '+IntToStr(S2.size));
  S1.writebuffer(tab,sizeof(tab));
  Showmessage('S1: '+IntToStr(S1.size)+#13+'S2: '+IntToStr(S2.size));
  S1.free;
  S2.free;
end;

w obu uzyskanych komunikatach rozmiary strumieni sa takie same,
pomimo iz zapis nastompil tylko do S1.

zatem nie trzeba nic robic z drugim strumieniem aby dostac sie do danych zapisanych
w tym samym pliku za pomoca innego strumienie.

pozdrawaiam

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