Jak zbuforować plik tekstowy?

0

Chodzi mi o coś takiego że mam dwa procesy które wywoływane są w różnych momentach (nieraz jednoczesnie) a muszą <ort>kokoRZystaćystać </ort>z jednego pliku tekstowego który zawiera pewne ważne dla programu informacje. Wszystko gra do momentu gry te dwa procesy nie będą chciały <ort>kokoRZystaćystać </ort>z jednego pliku naraz bo wtedy wyskakuje I/O error32 czyli NaruszenieZasadWspółdzielenia. Rozwiązałem ten problem <ort>twożąc </ort>w takich sytuacjach kopie tego pliku lecz wydaje mi się że można to zrobić inaczej choć nie wiem jak...
Za wszelką pomoc dziękuje...

0
  1. jeśli plik nie jest kosmicznie duży, to załaduj go do pamięci
  2. lub synchronizuj dostęp do pliku tak aby wątki nie odwoływały sie do niego jednocześnie (sekcje krytyczne, muteksy, semafory itp).
  3. lub najprościej: otwórz plik w trybie innym niż wyłączność na czytanie.
0

Pisane z glowy:

var
  Buffer : PChar;
  F : File;
begin
  AssignFile(F, 'C:\plik');
  try
    Reset(F, 1);
    try
      GetMem(Buffer, FileSize(F));
      BlockRead(F, Buffer^, FileSize(F));
{ tutaj operacje na buforze Buffer }
    finally
      FreeMem(Buffer);
    end;
  finally
    CloseFile(F);
  end;
end.
0

Przecież jeden plik można otwierać kilka razy jednocześnie.
Synchronizacja jest potrzebna jedynie gdy jest zapisywany,
ale nawet wtedy nie jest to konieczne - błędu dostępu nie będzie.

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