C# 创建用于监视和读取文件夹中文件内容的服务

C# 创建用于监视和读取文件夹中文件内容的服务,c#,.net,multithreading,C#,.net,Multithreading,我正在尝试创建一个服务,该服务将尝试创建一个监视文件夹的服务。每当创建一个新文件时,我都会尝试读取新文件的内容,并将同一文件的内容复制到新位置 我面临的问题是,只有第一个文件的名称被复制,并且在新位置创建了一个文件,但没有任何内容。根本不会创建后续文件 My Services.cs看起来像这样:- public partial class Service1 : ServiceBase { public Service1() { InitializeComponen

我正在尝试创建一个服务,该服务将尝试创建一个监视文件夹的服务。每当创建一个新文件时,我都会尝试读取新文件的内容,并将同一文件的内容复制到新位置

我面临的问题是,只有第一个文件的名称被复制,并且在新位置创建了一个文件,但没有任何内容。根本不会创建后续文件

My Services.cs看起来像这样:-

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        FileSystemWatcher Watcher = new FileSystemWatcher();
        Watcher.Path = "C:\\logs\\";
        Watcher.IncludeSubdirectories = true;
        Watcher.Created += new FileSystemEventHandler(Watcher_Changed);
        Watcher.EnableRaisingEvents = true;
    }

    private static void Watcher_Changed(object sender, FileSystemEventArgs e)
    {
        var CopyContents = new Thread(() => ThreadProcedure(e));
        CopyContents.IsBackground = true;
        CopyContents.Start();

    }

    private static void ThreadProcedure(FileSystemEventArgs e)
    {
        int counter = 0;
        string line;

        // Read the file and display it line by line.
        System.IO.StreamReader file =
            new System.IO.StreamReader(e.FullPath);
        string testfilepath = "C:\\Project Tests\\testfile\\" + e.Name;
        File.Create(testfilepath);
        var log = new StreamWriter(testfilepath);
        while ((line = file.ReadLine()) != null)
        {
            log.WriteLine(line);
            counter++;
        }
        log.Close();
        file.Close();
    }

    protected override void OnStop()
    {

    }

}

从内存中,创建的事件将在文件在磁盘上创建时触发,而不一定是在其内容写入磁盘后触发。我似乎记得我过去使用的解决方案是在处理文件之前稍等片刻。虽然可能有比我多年前使用的更好的解决方案…:您使用StreamReader/StreamWriter而不是System.IO.file.copy来复制文件有什么原因吗?我试图在线程功能的开始处放置Thread.Sleep10000,但它不起作用。我使用StreamReader是因为将来我将连续跟踪日志的每一行,目前正在测试基础知识:我认为这是C的streamwriter方法中的某种缺陷。我们有一个项目,其中XML文件被随机清除,在我们重写paser后,问题得到解决,注释读取也很好。