Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从主void调用私有void以启动我的应用程序_C#_Filesystemwatcher - Fatal编程技术网

C# 从主void调用私有void以启动我的应用程序

C# 从主void调用私有void以启动我的应用程序,c#,filesystemwatcher,C#,Filesystemwatcher,我还不是很擅长这个空虚的东西,所以任何帮助都将不胜感激 首先:我正在尝试创建一个文件系统监视程序,以监视目录,如果添加了文件,请等待文件创建完成,然后将其复制到另一个文件夹。我已经拼凑了下面的代码,但是我不知道如何调用私有void watch来启动它 第二:有人知道它是否自己循环吗?或者我必须为它创建一个文件夹才能继续查看文件夹 namespace filewatch { class Program { public static string watch_path = "C:\\tes

我还不是很擅长这个空虚的东西,所以任何帮助都将不胜感激

首先:我正在尝试创建一个文件系统监视程序,以监视目录,如果添加了文件,请等待文件创建完成,然后将其复制到另一个文件夹。我已经拼凑了下面的代码,但是我不知道如何调用私有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)) { }
    }

}
名称空间文件监视
{
班级计划
{
公共静态字符串watch_path=“C:\\testerson\\”;
公共静态字符串copy_path=“C:\\copyto\\”;
静态void Main(字符串[]参数)
{
手表;0;
}
捕获(例外)
{
返回false;
}
}
公共静态void WaitForFile(字符串文件名)
{
而(!IsFileReady(filename)){}
}
}
}

-编辑:


我已经将private voids更改为public static,现在没有出现错误,但是控制台应用程序不能继续运行。它现在只是开始和停止。所以它没有监视文件夹

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

您应该使watch()方法成为静态的,只需从Main方法调用它。

FSW循环就可以了。while循环可能正在阻塞代码。我不知道你在哪里调用创建FSW的“watch”。是的,调用watch是我需要帮助的。那也必须是
static
。你不明白static和instance方法之间的区别。为了成功地用C#编程,您需要了解这一点。您似乎还对“void”的含义感到困惑。“Void”仅仅意味着方法在完成时不返回值。void方法没有什么特别之处,只是调用它们时它们不会产生值,因此不能将对void方法的调用放在任何需要值的位置。不能将其设为静态,或者(onchanged)调用不起作用也可以设为
onchanged
static我编辑了我的问题,我不知道如何称呼FW voidwell如果你的问题不准确,请不要否决我的答案。