2011-06-06 23 views
13

WatchDir.java kod örneğini kullanarak bir dizinin tüm içeriğini yinelemeli olarak izlemek için Watching a Directory for Changes Java7 nio2 eğitimini takip ettim.Java7 WatchService - Access özyinelemeli iç içe dizinleri silmeye çalışırken erişim engellendi (yalnızca Windows)

Bu, Linux ve Mac üzerinde iyi çalışır, Windows'ta (Vista ve 7'de test edilmiştir), Windows Explorer'ı kullanarak iç içe geçmiş, izlenen klasörleri silmeye çalışmak, "Erişim Reddedildi" mesajına benzer bir ileti ile başarısız olur. Bu eylemi gerçekleştirmek için izne gerek duyarsınız "iç içe dizinlerden birinde bir dosya varsa. Örneğin

, ben Windows iç içe bir klasör ağacı izlerseniz:

-- Folder A 
    -- Folder A1 
     -- File F 

ve Klasör A silmeyi deneyin dedim erişim engellendi hatası alıyorum. Ben Ancak, iyi çalışıyor:

  • Klasör A1 sonra klasör serbest sonra klasörü silmek A
  • Sil Dosya silme Sil A

yinelemeli bir izlemek için nio2 WatchService kullanmak için bir yolu var mı yuvalanmış dizin, ancak bir programın yuvalanmış dosyalara erişmekte gibi davranmıyor mu?

cevap

14

Windows'ta bir dizini izliyorsanız, WatchService uygulamasının bu dizine (Windows'un çalışma şekli) açık bir tanıtıcısı vardır. Bu açık tanıtıcı, dizinin silinmesini engellemez ancak yöneticinin üst öğesinin derhal silinmesini engeller. İzlenen dizini sildiğiniz anda tutamaç kapatılır, ancak tutamaç kapatılmadan önce dizini silmeye çalışmanız mümkündür. Bu olduğunda, gördüğünüz erişimin reddedildiğini göreceksiniz. Yeniden denerseniz, bunun sizin için iyi çalıştığını varsayalım. Bunun nedeni, yeniden deneme yaptığınız zaman tanıtıcının kapanmasıdır.

Windows'da Sun JRE, ExtendedWatchEventModifier.FILE_TREE değiştiricisini register aramasında belirttiğiniz Windows alt saatini kullanabilir, bu sorun yalnızca bir dosya tanıtıcısı oluşturduğundan bu sorunun atlanmasına yardımcı olabilir.

+0

Windows'a özgü FILE_TREE değiştiricisi ile ilgili notu sağladığınız için teşekkür ederiz. Java 7 Hata Veritabanında ilgili hatada benzer bir yorum vardı (http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=76a42b61021a94ffffffffa049f7587fd4149?bug_id=6972833 –

+0

Ayrıca Eclipse de , Rt.jar'deki Erişim Kısıtlaması'nın neden olduğu Hatası bir Uyarı'ya indirmem gerekiyordu. Http://lkamal.blogspot.com/2008/09/eclipse-access-restriction-on-library.html sayfasına bakın. –

İlgili konular