0

我搜索了许多文章并尝试了几种不同的方法来解决这个问题。

请注意,此过程在具有完全相同代码的控制台应用程序或 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();
        }
4

0 回答 0