检查文件夹是否包含具有特定扩展名的文件

本文关键字:扩展名 文件 文件夹 是否 包含具 检查 | 更新日期: 2023-09-27 17:58:35

我有其他C#代码,可以将呼叫记录文件放入文件夹C:''Recordings

每个文件的扩展名为.wma

我希望能够每5分钟检查一次文件夹。如果文件夹中包含一个以.wma结尾的文件,我想执行一些代码。

如果文件夹中不包含扩展名为.wma的文件,我希望代码暂停5分钟,然后重新检查(无限)。

我从下面的检查开始,检查文件夹中是否有任何文件,但当我运行它时,它总是报告文件夹包含文件,即使它没有。

string dirPath = @"c:'recordings'";
        if (Directory.GetFiles(dirPath).Length == 0)
        {
            NewRecordingExists = true;
            Console.WriteLine("New Recording exists");
        }
        else
        {
            NewRecordingExists = false;
            Console.WriteLine("No New Recording exists");
            System.Threading.Thread.Sleep(300000);
        }

检查文件夹是否包含具有特定扩展名的文件

if (Directory.GetFiles(dirPath).Length == 0)

这是在检查是否没有文件。。。那么您正在报告"New Recording exists"。我认为你的逻辑是错误的。else表示您已找到一些文件。

此外,如果您只想检查*.wma文件,那么您可以使用GetFiles重载,该重载采用搜索模式参数,例如:

if (Directory.GetFiles(dirPath, "*.wma").Length == 0)
{
    //NO matching *.wma files
}
else
{
    //has matching *.wma files
}

旁注:您可能对FileSystemWatcher感兴趣,这将使您能够监控录制文件夹的更改(包括添加文件时)。这将消除您每5分钟轮询一次的要求,并且当添加文件时,您几乎可以立即执行,而不是等待5分钟的时间间隔来勾选

首先,您的逻辑是颠倒的!)
这是你的正确代码:

        bool NewRecordingExists;
        string dirPath = @"c:'recordings'";
        string[] fileNames = Directory.GetFiles(dirPath, "*.wma", SearchOption.TopDirectoryOnly);
        if (fileNames.Length != 0)
        {
            NewRecordingExists = true;
            foreach (string fileName in fileNames)
            {
                Console.WriteLine("New Recording exists: {0}", fileName);
                /*  do you process for each file here */
            }
        }
        else
        {
            NewRecordingExists = false;
            Console.WriteLine("No New Recording exists");
            System.Threading.Thread.Sleep(300000);
        }

尽管如此,我还是建议您使用System.Timers.Timer类进行应用!

如果要丢弃结果,请不要使用GetFiles。使用枚举以便提前退出:

Directory.EnumerateFiles(Folder, "*.wma", SearchOption.AllDirectories).FirstOrDefault() != null