TFileStream - rownolegly zapis...

TFileStream - rownolegly zapis...
Johny_Morfina
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 5 lat
  • Postów:448
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?


Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
Marmar
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 lata
  • Postów:317
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

Kopiuj
FlushFileBuffers(f1.Handle);

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

Johny_Morfina
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 5 lat
  • Postów:448
0

A oto i rozwiazanie problemu

Kopiuj
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


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.