2011-05-04 15 views
14

C# kullanma Kimler açık bir dosya hakkında bilgi alabilirim? Kullanıcı adı ve makine adı yeterli olacaktır.Kimin C kullanarak açık bir dosya olduğunu belirleme C#

Önemli olması durumunda Windows işletim sistemlerinde bir Linux dosya sunucusundaki dosyalara Samba üzerinden erişiyorum. Bu bilgilere iş istasyonlarında çalışan bir programda ihtiyacım var. Ben bu sorunu çalıştırmak geçirdiğimizde bunu size Geçmişte bu kullanarak .NET

yapabilirsiniz sanmıyorum

cevap

4

Temel .NET kitaplıklarının bunu yapmak için herhangi bir yolu yoktur.

Ve eğer doğru bir şekilde anlıyorsam, Windows iş istasyonundan Linux dosya paylaşımında açık olan dosyaları olan ve açık dosyaya sahip olanlardan bazılarının diğer pencere kutularından kaynaklanmış olabileceğini bilmek istersiniz. Linux tarafında, Windows çalışma istasyonunuza geri sağlamak için sorgulayabileceğiniz bir hizmete sahip olmanız gerekecektir.

Yerel makinede bu gerçekleştirilebilir, ancak en azından sizin için NtQueryInformationFile ve NtQueryObject (ikisi de resmi olarak belgelenmemiş) gibi OS API'leri ile birlikte çalışmanız gerekir. İşlem izleme gibi araçlar, yaptıkları denetim düzeyine ulaşmak için bir aygıt sürücüsünü dinamik olarak kurar ve yalnızca hangi yerel dosya tanıtıcılarının hangi kullanıcı tarafından açıldığını söyleyecektir.

+0

Sorumu doğru anladınız. System.IO'da böyle bir hayvan olabileceğini düşündüm. Muhtemelen bir .DWG (veya ilgili) dosyası hakkında bilgi alan bir WhoHasInfo yöntemine sahip AutoCAD API'sini düşünüyordum. Kullanıcı adı, bilgisayar adı, isFileLocked ve OpenTime alır. – mohnston

+0

Uzak dosya Windows Server'da paylaşılan bir klasörden etkileniyorsa ne olur? Bu durumda konu SAMBA mı yoksa .NET kütüphanelerinde gerçek bir eksiklik midir? –

+0

Başkalarına yardımcı olmak için: Bir Linux Samba dosya sunucusu olduğundan, "smbstatus" komutunu çalıştırmanız, çıktıyı yakalamanız ve ayrıştırmanız gerekir. Hangi içerir: kullanıcı, makine ve dosyaları. Hatta -L seçeneğiyle (Java'da aynısını yapmaya çalışıyorum ve bulduğum tek yol budur) sadece kilitli dosyaların bir listesini bile isteyebilirsiniz, ancak bir pencere için çalışan bir çözüm gibi düşünebilirim Linux yoluyla 2008 dosya sunucusu orada açık bir çözüm değildir. – Quaternion

İlgili konular