【发布时间】:2020-05-06 22:04:19
【问题描述】:
我使用FileSystemWatcher 检测目录更改,然后读取文件内容并将其插入数据库。
这是我的代码:
private FileSystemWatcher _watcher;
public MainWindow()
{
try
{
InitializeComponent();
GetFiles();
//Task.Factory.StartNew(() => GetFiles())
// .ContinueWith(task =>
// {
// }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
}
catch(Exception ex)
{
//..
}
}
public bool GetFiles()
{
_watcher = new FileSystemWatcher(Globals.iniFilesPath, "*.ini");
_watcher.Created += FileCreated;
_watcher.IncludeSubdirectories = false;
_watcher.EnableRaisingEvents = true;
return true;
}
private void FileCreated(object sender, FileSystemEventArgs e)
{
try
{
string fileName = Path.GetFileNameWithoutExtension(e.FullPath);
if (!String.IsNullOrEmpty(fileName))
{
string[] content = File.ReadAllLines(e.FullPath);
string[] newStringArray = content.Select(s => s.Substring(s.LastIndexOf('=') + 1)).ToArray();
ChargingStationFile csf = new Product
{
Quantity = Convert.ToDecimal(newStringArray[1]),
Amount = Convert.ToDecimal(newStringArray[2]),
Price = Convert.ToDecimal(newStringArray[3]),
FileName = fileName
};
ProductController.Instance.Save(csf);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
如果我使用 CTRL+F5 运行此代码,我会收到以下消息:
但如果我使用 F5(调试模式),我会收到这个,而不是这个关于无法访问进程和项目已成功保存的错误。这真的让我很困惑..
我应该处置观察者吗?或类似的东西?也许我在这里遗漏了一些东西?
这是我第一次使用 FileSystemWatcher,不知不觉这里出了点问题..
P.S 我发现这行导致异常:
string[] content = File.ReadAllLines(e.FullPath);
怎么来的?
谢谢大家
干杯
【问题讨论】:
-
我想你可以重温这个答案:stackoverflow.com/a/21739647/2844593
-
@Marlonchosky 我之前已经尝试过该帖子,但下面的代码虽然从未执行,但看起来文件从未准备好,真的很奇怪......
-
我最近写了一个答案。我希望这会有所帮助!
标签: c# wpf filesystemwatcher system.io.file