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
0
- jeśli plik nie jest kosmicznie duży, to załaduj go do pamięci
- lub synchronizuj dostęp do pliku tak aby wątki nie odwoływały sie do niego jednocześnie (sekcje krytyczne, muteksy, semafory itp).
- 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.