Ayni dosyaya erisen programlar

Başlatan Zoroaster, 13 Mart 2017, 08:48:41

Zoroaster

Programlardan birisi dosya acip icine bir sey yaziyor diger program ise bu dosyayi acip okuyor.

Normalde dosya icine kod yazan isini bitirmeden diger programin dosyayi acmamasi lazim.

Bu amacla dosyayi okumak isteyen programin dosyanin diger program tarafindan kapatilmis oldugundan emin olmasi lazim.

Bu kontrolu nasil yaparim?
Seytan deliginden kacti.

dnacikaya

Bir txt dosyasına 1. Program kullanıken 1 değeri verin. Birinci programın işi bitince bu değeri sıfır yapın. 2. program ulaşmaya çalıştığında önce bu değere baksın. 1 ise işlem yapmasın. Sıfır ise işlem yapsın dosyaya.
Başka 2. Txt dosyasıyla 2. Program İşlem yaparken 1. programın müdahalesini engelleyebilirsiniz.

Zoroaster

Dosyayi dos yapisinda acip gecerli bir handle no alamadi isem karsi taraf file isini tamamlamamistir mantigi isimi gordu. Boyle yapmak yerine yuksek seviyeli komutlari kullanirsam hata kutuvugu cikiyor ve ok tusuna basmam gerekiyordu.
Seytan deliginden kacti.

kimlenbu

delphi kullanmayalı sanırım 20 sene falan oldu ama "isfileinuse" diye fonksiyon yazmış adam, onu kullanıp dosya kullanımda mı kontrol edebilirsin

https://www.experts-exchange.com/questions/22887573/Delphi-File-Write-Exception.html

Bunun da şöyle bir sıkıntısı varmış, sen kontrol edene kadar başka bir program erişip açabiliyormuş, çok düşük ihtimal olsa da başına gelebilir ve gene hata alırsın. Bunun için de "lock" mekanizması varmış.

text file ile uğraşacağına local database kullan kafan rahat olsun.

zamzam23

Güvenlik problem olmadığı zaman ben genelde database yerine text dosyası kullanmayı tercih ediyorum.
2 değil de 100 program bu işlemi yapacak olursa, bunu nasıl kontrol ederiz?

100 programın hepsi de okuma ve yazma yapabilecek olsun.

cetin1990

Mutex, WaitForSingleObject, WaitForMultipleObject. EnterCriticalSection, LeaveCriticalSection.

engerex

Açılacak dosyayı sizin uygulamanız erişmiyor da olabilir.
Aşağıdaki kod ile dosyanın o an sizin veya başka uygulama tarafından açılıp açılmadığını anlayabilirsiniz. Geliştirilebilir.


procedure TForm1.Button1Click(Sender: TObject);
var
FS1 : TFileStream;
begin
FS1 := TFileStream.Create('Test.txt', fmOpenReadWrite); //Dosyamıza okuma ve yazma için erişim sağladık.
end;


procedure TForm1.Button2Click(Sender: TObject);
var
FS2 : TFileStream;
HataDurumu : Integer;
begin
HataDurumu := 0;
try
FS2 := TFileStream.Create('Test.txt', fmOpenReadWrite); //Dosyamıza okuma ve yazma için erişim sağladık.
except
ShowMessage('Dosya bir uygulama tarafından erişildiği için açma işlemi başarısız.');
HataDurumu := -1;
end;


if HataDurumu = 0 then ShowMessage('Dosyaya erişim sağlandı.');
end;