2016-11-07 3 views
-1

У меня есть прецедент, где мне нужно определить, является ли файл ReadOnly доступным для записи. Я пробовал использовать FileSystemWatcher, но он не говорит мне, какой атрибут файла изменился.

C# - Мониторинг, если атрибут Readonly любого файла был изменен

// Create a new FileSystemWatcher and set its properties. 
    FileSystemWatcher watcher = new FileSystemWatcher(); 
    watcher.Path = args[1]; 
    /* Watch for changes in Attribute (In this case only Readonly attribute). */ 
    watcher.NotifyFilter = NotifyFilters.Attributes; 

    private static void OnChanged(object source, FileSystemEventArgs e) 
    { 
     // Specify what is done when a file is changed, created, or deleted. 
     Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); 
    } 

Я не знаю, какие файлы ReadOnly и которые не являются. Поэтому я не могу просто проверить свойство ReadOnly файла в событии Changed.

+2

Ну, если вы просматриваете файл только для чтения и получаете уведомление о его изменении, не можете ли вы просто проверить атрибут? –

+0

Вам необходимо посмотреть System.IO.NotifyFilters. хотя, увидеть другие ответы, связанные с какой из них подходит код https://msdn.microsoft.com/en-us/library/system.io.notifyfilters(v=vs.110).aspx – celerno

+0

@PeterDuniho Не могли бы вы снова открыть вопрос. Я сделал изменения. – Peaked

ответ

1

Оформить заказ System.IO.FileInfo.IsReadOnly. В основном вы можете определить, была ли сделана запись, выполнив следующее в обработчике событий OnChanged. Это основано на предположении, что файл был первоначально доступен для чтения.

// Define the event handlers. 
private static void OnChanged(object source, FileSystemEventArgs e) 
{ 
    // Specify what is done when a file is changed, created, or deleted. 
    if(!System.IO.FileInfo.IsReadOnly) changedToWritable = true; 

} 

Примечание https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx указывает, что OnChanged из FileSystemWatcher сообщает об изменениях в атрибутах файлов.

+0

Я не знаю, какие из файлов в контролируемой директории доступны только для чтения – Peaked