Filesystemwatcher C# 观察器对象在启动时持续存在
Filesystemwatcher C# watcher objects persist on startup
学习本教程:http://www.codeproject.com/Articles/26528/C-Application-to-Watch-a-File-or-Directory-using-F
我修改了上面的教程并创建了一个 windows 表单应用程序,它可以创建多个 filesystemwatcher 实例并 track/delete 它们在表单的列表中。
我的下一个目标是在计算机 restart/startup 上,windows 表单应用程序以及我创建的所有观察者对象将保持活动状态。
我认为这需要 4 个部分:
1) 保存重启后要访问的watcher对象及其元数据的信息(目前我将对所有watcher对象的引用保存在一个List变量中)
2) 即使在重启后观察者对象仍然存在
3) 在启动时启动 windows 表单
4) 访问保存的观察者对象信息,使其仍然出现在windows表单列表中。
我是 C# 的新手,这是我的第一个项目,所以我对如何处理这些步骤一无所知。任何帮助将不胜感激。
您必须在重启后创建新的观察者对象。您需要存储的信息需要有不同的class,例如:
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);
学习本教程:http://www.codeproject.com/Articles/26528/C-Application-to-Watch-a-File-or-Directory-using-F
我修改了上面的教程并创建了一个 windows 表单应用程序,它可以创建多个 filesystemwatcher 实例并 track/delete 它们在表单的列表中。
我的下一个目标是在计算机 restart/startup 上,windows 表单应用程序以及我创建的所有观察者对象将保持活动状态。
我认为这需要 4 个部分:
1) 保存重启后要访问的watcher对象及其元数据的信息(目前我将对所有watcher对象的引用保存在一个List变量中)
2) 即使在重启后观察者对象仍然存在
3) 在启动时启动 windows 表单
4) 访问保存的观察者对象信息,使其仍然出现在windows表单列表中。
我是 C# 的新手,这是我的第一个项目,所以我对如何处理这些步骤一无所知。任何帮助将不胜感激。
您必须在重启后创建新的观察者对象。您需要存储的信息需要有不同的class,例如:
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);