从Main void调用一个private void以启动我的应用程序

时间:2018-07-10 18:49:38

标签: c# filesystemwatcher

我对这种空洞的东西还不是很熟练,所以我们将不胜感激。

首先:我试图创建文件系统监视程序,以监视目录,如果添加了文件,则等待文件创建完成,然后将其复制到另一个文件夹。我已经整理了下面的代码,但是我不知道如何调用 private void watch 来启动它。

第二:有人知道它是否自动循环吗?还是我必须为其创建一个才能继续查看文件夹?

namespace filewatch
{
class Program
{
    public static string watch_path = "C:\\testerson\\";
    public static string copy_path = "C:\\copyto\\";


    static void Main(string[] args)
    {
        watch(); <---- how can I call watch from here to start it.
    }

    public void watch()
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = watch_path;
        watcher.NotifyFilter = NotifyFilters.LastWrite;
        watcher.Filter = "*.*";
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.EnableRaisingEvents = true;
    }

    private void OnChanged(object source, FileSystemEventArgs e)
    {
        WaitForFile(e.FullPath + e.Name);
        System.IO.File.Copy(e.FullPath, copy_path + e.Name);
    }

    public static bool IsFileReady(string filename)
    {
        try
        {
            using (FileStream inputStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.None))
                return inputStream.Length > 0;
        }
        catch (Exception)
        {
            return false;
        }
    }

    public static void WaitForFile(string filename)
    {
        while (!IsFileReady(filename)) { }
    }

}

}

-编辑:

我已将私有空白更改为公共静态,现在没有出现错误,但控制台应用程序无法保持运行。它只是现在开始和停止。因此它不在监视文件夹。

2 个答案:

答案 0 :(得分:2)

您应该将watch()方法设为静态,并只需从Main方法中调用它即可。

答案 1 :(得分:-1)

我假设程序通过运行staic void主字符串args开始。如果将private void watch()更改为public void watch,那么您应该能够从主类中调用该构造函数/方法。