我搜索了很多文章,尝试了几种不同的方法来解决这个问题。
请注意,此过程在控制台应用程序或具有完全相同代码的Windows应用程序中正常工作。所以,逻辑没有错。这就是Windows服务处理这些文件的方式,它不会让后续文件通过。
我尝试阅读一篇简单的文章来实际调试服务,但是我没有使用Visual Studio 2010在“调试”菜单下选择“附加到进程”。 的 http://msdn.microsoft.com/en-us/library/7a50syb3(V = VS.100)的.aspx
我真的需要一些帮助,因为我的选择确实用完了。
这是一个简单的场景: 我在OnStart方法中有一个FileSystemWatcher,它启动了另一种方法来处理本地机器上的文件。这些只是简单的txt文件。处理完第一个文件后,一切正常,我在事件日志中得到以下内容: 已成功为文件插入数据 20121212_AZM_Journey_MIS.txt
当我尝试处理后续文件(完全相同的格式,但名称与日期不同)时,我在事件日志中得到以下内容: 该进程无法访问文件'C:\ Projects \ Data \ VendingStats \ 20121213_AZM_Journey_MIS.txt',因为它正由另一个进程使用。
请注意,创建时会在同一目录中监视文件。
这是我的Windows服务中的代码。有人请让我知道如何解决这个问题?请注意,e.FullPath在我的本地计算机上评估为“C:\ Projects \ Data \ VendingStats”。
public partial class VendingStatsService : ServiceBase
{
public VendingStatsService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
FileSystemWatcher Watcher = new FileSystemWatcher(@"C:\Projects\Data\VendingStats");
Watcher.EnableRaisingEvents = true;
Watcher.Created += new FileSystemEventHandler(**Watcher_Created**);
Watcher.Filter = "*.txt";
Watcher.IncludeSubdirectories = false;
}
private void Watcher_Created(object sender, FileSystemEventArgs e)
{
try
{
using (TextReader tr = new StreamReader(e.FullPath))
{
// code here to insert data from file into a DB
}
Dispose();
}
catch (Exception ex)
{
EventLog.WriteEntry("VendorStats", "Error in the Main:" + "\r\n\r\n" + ex.Message + "\r\n\r\n" + ex.InnerException);
return;
}
}
public void Dispose()
{
GC.Collect();
}