【问题标题】:FileSystemWatcher OnCreated returning string?FileSystemWatcher OnCreated 返回字符串?
【发布时间】:2017-03-31 02:11:47
【问题描述】:

我想让 FileSystemWatcher 监视一个文件夹,一旦在里面创建了一个文件来获取文件名,那么之后 File.OpenRead() 和 StreamReader 就可以读取该文件

我看过很多例子,但不是我的情况:

        public static void FileWatcher()
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"C:\Users\";
        watcher.NotifyFilter = NotifyFilters.LastWrite;
        watcher.Filter = "*.txt";
        watcher.Created += new FileSystemEventHandler(OnCreated);
        watcher.EnableRaisingEvents = true;
    }

    public static void OnCreated(object source, FileSystemEventArgs e)
    {
        string filename = Path.GetFileName(e.FullPath);
    }

我的问题是如何获取将在该文件夹中创建的文件名并将其路径和文件传递给,因为事件方法是无效的:

const string fileName = @"C:\Users\.txt";
        using (var stream = File.OpenRead(fileName))
        using (var reader = new StreamReader(stream))

任何帮助表示赞赏!

【问题讨论】:

  • 只需调用一个函数并传入文件路径,如 void processfile(string file2process)... 你有什么问题?这是规格..msdn.microsoft.com/en-us/library/…
  • 我不明白的是如何获取文件名和路径,以便我可以将其传递给一个方法,将读取作为字符串处理,看起来像 - string fileName = @"C:\Users\Desktop\Project\standard.txt";

标签: c# filesystemwatcher


【解决方案1】:

我建议将您的文件处理封装在一个单独的类中。

public class FileProcessor
{
      public void ProcessFile(string filePath)
       {
           using (var stream = File.OpenRead(filePath))
           //etc...

       }
}

然后实例化它并调用它。

 public static void OnCreated(object source, FileSystemEventArgs e)
    {
       var processor = new FileProcessor();
       processor.ProcessFile(e.FullPath);
    }

或者,如果您的方法与 Created 事件属于同一类

YourMethodName(e.FullPath);

你的方法应该有这样的签名

void YourMethodName (string filePath)
{
  //Process file
}

【讨论】:

  • 我已经有了一个方法,但我不确定如何获取 string filePath 并将其从 OnCreate 事件传递给它。
  • 你可以发布你的代码吗?我的示例展示了如何将创建的事件中的文件路径(e.FullPath)作为字符串传递给方法。如果您的方法不在另一个类中,则只需调用它。我已经更新了答案
  • 我在您的指导下设法做到了,并得到了一个 IOException,表明该文件正在被另一个进程使用,这意味着该文件已被锁定,因为它仍在复制/创建?线程.睡眠(2300);解决了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2020-08-07
  • 2012-05-03
  • 1970-01-01
相关资源
最近更新 更多