我有其他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);
}
答案 0 :(得分:24)
if (Directory.GetFiles(dirPath).Length == 0)
这是检查是否没有文件...然后您正在报告"New Recording exists"
。我认为你的逻辑错误。 else
表示您找到了一些文件。
此外,如果您只想检查*.wma
个文件,则可以使用the GetFiles
overload that takes a search pattern parameter,例如:
if (Directory.GetFiles(dirPath, "*.wma").Length == 0)
{
//NO matching *.wma files
}
else
{
//has matching *.wma files
}
SIDE NOTE :您可能对FileSystemWatcher感兴趣,这样您就可以监控录制文件夹中的更改(包括添加文件时)。这将消除您每5分钟轮询一次的要求,并且在添加文件时您会立即执行,而不是等待5分钟的时间间隔进行勾选
答案 1 :(得分:1)
首先,你的逻辑是颠倒过来的! ;)
这是你正确的代码:
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
类!