0

File Watcher(.NET)を使用していますが、常に以下のエラーファイルが別のプロセスで使用されています。

上記のエラーはネットワーク共有でのみ発生します。つまり、ウォッチディレクトリが共有され、誰かがファイルをそのディレクトリに置くと、このエラーのみが発生します。m / cから監視ディレクトリ(ローカル)にファイルを配置すると、正常に動作します。

これは私の以下のコードがどのように見えるかです、エラーは最初の行自体にあります。私はネット上で与えられたすべての解決策を試しましたが、何も機能していないようです。Thread.Sleep(500)を配置したときに唯一の解決策が機能しましたが、その後は次のファイルを選択できません。どんな提案でも大きな助けになるでしょう。

      try
        {

         using (Stream stream = File.Open(xmlPath, FileMode.Open, FileAccess.Read,             FileShare.Read))
          {
                    XmlTextReader xmlTextReader = new XmlTextReader(stream);
                    document = XDocument.Load(xmlTextReader);
                    ........ // my code
                    xmlTextReader.Close();
                    stream.Close();

           }
        }
       catch (Exception exception)
            {
                EventLog.WriteEntry("Application", exception.ToString(), EventLogEntryType.Error);

            }
4

1 に答える 1

1

ファイルにアクセスできないため、待機が機能する理由がわかると思います。

このコードを見て、これが役立つかどうかを確認してください...

// Consider having a List<String> named _changedFiles

private void OnChanged(object source, FileSystemEventArgs e)
{
    lock (_changedFiles)
    {
        if (_changedFiles.Contains(e.FullPath))
        {
            return;
        }
    }

    // do your stuff

    System.Timers.Timer timer = new Timer(1000) { AutoReset = false };
    timer.Elapsed += (timerElapsedSender, timerElapsedArgs) =>
    {
        lock (_changedFiles)
        {
            _changedFiles.Remove(e.FullPath);
        }
    };
   timer.Start();
}

from: FileSystemWatcherChangedイベントが2回発生します

于 2012-10-04T10:05:00.853 に答える