2015-11-01 3 views
0

После этого урока: http://www.codeproject.com/Articles/26528/C-Application-to-Watch-a-File-or-Directory-using-FFileSystemWatcher C объекты # Watcher сохраняются при запуске

Я изменил выше учебник и создал форму окна приложения, которые могут создать несколько экземпляров FileSystemWatcher и отслеживать/удалять их в списке на форме.

Моя следующая цель - сделать так, чтобы при перезагрузке/запуске компьютера приложение формы окон оставалось активным, а также все объекты наблюдателя, которые я создал.

Я полагаю, что это займет 4-х частей:
1) Сохранение информации об объектах Бодрствующих и их метаданных, которые будут использоваться после перезагрузки (в настоящее время я сохранить ссылки на все объекты средства отслеживания в переменной List)
2) Считайте объекты мониторинга сохраняются даже после перезапуска.
3) Запустите форму окна при запуске.
4) Получите доступ к информации о сохраненном объекте наблюдателя, чтобы он по-прежнему отображался в списке форм Windows.

Я новичок в C#, и это мой первый проект, поэтому у меня мало идеи о том, как справиться с этими шагами. Любая помощь будет оценена по достоинству.

+0

Звуки как у вас уже есть _idea_. Ты можешь это сделать. – MickyD

+0

Не могли бы вы сказать, что мои первые шаги и их правильные? – somethingstrang

+0

Я думаю, что это хороший план, _yes_. У вас есть код для показа? См. [Faq] и [ask] – MickyD

ответ

1

После перезапуска вам необходимо создать новые объекты-наблюдатели. Информация, которую вы должны магазин должен иметь другой класс, например:

public class SettingItem 
{ 
    public string Path { get; set; } 
} 
public class Settings 
{ 
    public SettingItem[] Items { get; set; } 
} 

Затем вы можете использовать XmlSerializer для хранения объектов на диске:

public static class SettingManager 
{ 
    public static void Save(string path, object obj) 
    { 
     if (string.IsNullOrWhiteSpace(path)) 
      throw new ArgumentNullException(nameof(path)); 
     if (obj == null) 
      throw new ArgumentNullException(nameof(obj)); 

     Directory.CreateDirectory(Path.GetDirectoryName(path)); 

     using (var s = new StreamWriter(path)) 
     { 
      var xmlSerializer = new XmlSerializer(obj.GetType()); 
      xmlSerializer.Serialize(s, obj); 
     } 
    } 

    public static T Load<T>(string path) where T : class, new() 
    { 
     if (string.IsNullOrWhiteSpace(path)) 
      throw new ArgumentNullException(nameof(path)); 

     if (File.Exists(path)) 
     { 
      using (var s = new StreamReader(path)) 
      { 
       var xmlSerializer = new XmlSerializer(typeof(T)); 
       return xmlSerializer.Deserialize(s) as T; 
      } 
     } 
     return new T(); 
    } 
} 

Использование:

var settingPath = @"c:\...xml"; 

var settings0 = new Settings 
{ 
    Items = new[] 
    { 
     new SettingItem { Path = @"c:\path\to\watch" }, 
    } 
}; 
SettingManager.Save(settingPath, settings0); 

var settings1 = SettingManager.Load<Settings>(settingPath); 
+0

Здравствуйте, спасибо за помощь. Так что, если я читаю ваш код право: 1) класс настройки сохраняет мету информации, необходимую для воссоздания класса Watcher класса 2) SettingItem сохраняет индивидуальные наблюдатела метаинформацию (путь) 3) SettingManager класс, который сохраняет и загружает массив настроек в xml-файл? – somethingstrang

+0

@somethingstrang Извините, полностью пропустил ваш комментарий. Класс Settings содержит массив объектов SettingItem, каждый из которых содержит отдельную информацию для воссоздания наблюдателя, например. 'foreach (var x в settings.Items) {... new FileSystemWatcher (x.Path); } '. Класс настроек - это только оболочка с конструктором с нечетным параметром (неявным), требуемым XmlSerializer. SettingManager обертывает функции статической загрузки и сохранения и не содержит никакой информации. – mtman

 Смежные вопросы

  • Нет связанных вопросов^_^