等待文件存在于目录中 C#

You*_*mos 1 c# directory file-exists visual-c#-express-2010

我正在创建一个文件,它的Visual C# application部分功能是在.gz文件出现在目录中时提取文件。.gz一旦执行命令行参数,该文件就会出现在指定的目录中。

不幸的是,我收到一条错误消息,说“找不到此文件”,这是由于它读取行以.gz过快地提取文件的原因。

换句话说,它试图.gz在命令行参数执行之前执行文件并将文件实际放入目录中。

我想找到一种方法让我的程序在继续读取下一行之前等待文件出现在目录中。

以下是我的代码,任何帮助将不胜感激!谢谢!

else if (ddlDateType.Text == "Monthly" || ddlDateType.Text == "")
{
    //Check if Monthly date entered is valid
    if (DateTime.TryParseExact(txtDate.Text, MonthlyFormat, null,
        System.Globalization.DateTimeStyles.None, out Test) != true)
    {
        MessageBox.Show("Enter a valid date.\nFormat: yyyyMM");
    }
    else
    {
        //Method that executes an arugment into the command prompt
        ExecuteCommand();

        //Method that extracts the file after it has already appeared in the directory
        ExtractFile();

        /*
        Goal is to wait for the file to appear in the directory before it executes
        the ExtractFile() method.
         */

    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*tta 5

您可以使用 FileSystemWatcher。https://msdn.microsoft.com/it-it/library/system.io.filesystemwatcher(v=vs.110).aspx

在此示例中,每次将文件添加到受监控文件夹时都会调用回调 OnChanged。

   [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    public static void RunWathcer()
    {

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();

        watcher.Path = "PATH TO WATCH GOES HERE!!";

        /* Watch for changes in LastAccess and LastWrite times, and
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;

        watcher.Filter = "*.*";

        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.EnableRaisingEvents = true;
    }

    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这个 FileSystemWatcher 类存在。我可以看到这很有用。@Gary 如果名称是动态的,那么 watcher.Filter 看起来可以设置为查找特定文件或文件扩展名。 (2认同)