检查文件夹是否包含具有特定扩展名的文件
本文关键字:扩展名 文件 文件夹 是否 包含具 检查 | 更新日期: 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