void Scan (string path, bool postEvents, ref List<int> fds)
{
if (requestStop)
return;
var pathData = Add (path, postEvents, ref fds);
if (pathData == null)
return;
if (!pathData.IsDirectory)
return;
var dirsToProcess = new List<string> ();
dirsToProcess.Add (path);
while (dirsToProcess.Count > 0) {
var tmp = dirsToProcess [0];
dirsToProcess.RemoveAt (0);
var info = new DirectoryInfo (tmp);
FileSystemInfo[] fsInfos = null;
try {
fsInfos = info.GetFileSystemInfos ();
} catch (IOException) {
// this can happen if the directory has been deleted already.
// that's okay, just keep processing the other dirs.
fsInfos = new FileSystemInfo[0];
}
foreach (var fsi in fsInfos) {
if ((fsi.Attributes & FileAttributes.Directory) == FileAttributes.Directory && !fsw.IncludeSubdirectories)
continue;
if ((fsi.Attributes & FileAttributes.Directory) != FileAttributes.Directory && !fsw.Pattern.IsMatch (fsi.FullName))
continue;
var currentPathData = Add (fsi.FullName, postEvents, ref fds);
if (currentPathData != null && currentPathData.IsDirectory)
dirsToProcess.Add (fsi.FullName);
}
}
}