2010-06-27 28 views
5

Bir günlük dosyası açmak için bir TFileSteam kullanıyorum. Bu kayıt dosyasını diğer süreçlerden okuyabilmek isterim. FmShareDenyWrite modunun buna izin vereceğini düşündüm.fmShareDenyWrite modu işe yaramıyor

Ancak dosyayı diğer işlemlerden açmaya çalışırsam bir hata alıyorum. Örneğin, dosyayı komut satırından yazıp yazıyorsa, "başka bir işlem tarafından kullanıldığından işlem dosyaya erişemiyor" alıyorum. İşte

dosya başlatma kodu:

if FileExists(AutoLogFileName) then 
    _ActivityLogStream := TFileStream.Create(AutoLogFileName, 
      fmOpenReadWrite or fmShareDenyWrite) 
else 
    _ActivityLogStream := TFileStream.Create(AutoLogFileName, 
      fmCreate or fmShareDenyWrite); 

NOT: Ben Delphi sürümünü kullanıyorum 6.

+1

Kullanarak açan diğer uygulamalar hangi modda açılır? – mj2008

cevap

8

bu zaten D6 bir hata olup olmadığını bilmiyorum, ama bu ayrı bir olasılıktır. Raporda, D2007: QC 65767: http://qc.embarcadero.com/wc/qcmain.aspx?d=65767'a karşı bir Kalite Kontrol raporu bulunmaktadır. Bu rapor, D2010'da (14.0.3467.22472 tam olarak) çözüldüğü için artık kapalı. (Gabr yorumuna tarafından istendiğinde)

Güncelleme:

Sen modunu onurlandırmak yapar kendi TFileStream soyundan oluşturabilirsiniz. Sadece Create(const AFileName: string; Mode: Word; Rights: Cardinal) yapıcısını geçersiz kılın (iki aşırı yüklenici var) ve mod parametresini kendiniz işleyin. Orijinal yapıcı kodu kopyalayın ve değiştirmek

if Mode = fmCreate then 
    begin 
    inherited Create(FileCreate(AFileName, Rights)); 

için

myMode tipi Word yerel var olan
if (Mode and fmCreate = fmCreate) then 
    begin 
    myMode := Mode and $FF; 
    if myMode = $FF then 
     myMode := fmShareExclusive; 
    inherited Create(FileCreate(AFileName, myMode, Rights)); 

.

+0

Bu QC girişi de çözümü sunuyor. – gabr

2

mfCreate modu herhangi paylaşım özelliği olan doğru/işi davranmaz. geçici olarak çözmek için, dosya kendini idare oluşturmak ve yapıcı onu geçmelidir

Cheer

+0

Bana bir kod örneği verebilir misiniz? – Aheho

İlgili konular