There is a nice new method in .NET 4.0 for getting files in a directory in a streaming way via enumeration.
The problem here is that if one wishes to enumerate all f
I'm late, but I suggest using observable pattern instead:
public class FileUtil
{
private static void FindFiles_(string path, string pattern,
SearchOption option, IObserver obs, CancellationToken token)
{
try
{
foreach (var file in Directory.EnumerateFiles(path, pattern,
SearchOption.TopDirectoryOnly))
{
if (token.IsCancellationRequested) break;
obs.OnNext(file);
}
if (option != SearchOption.AllDirectories) return;
foreach (var dir in Directory.EnumerateDirectories(path, "*",
SearchOption.TopDirectoryOnly))
{
FindFiles_(dir, pattern, option, obs, token);
}
}
catch (UnauthorizedAccessException) { }
catch (PathTooLongException) { }
catch (IOException) { }
catch (Exception err) { obs.OnError(err); }
}
public static IObservable GetFiles(string root, string pattern,
SearchOption option)
{
return Observable.Create(
(obs, token) =>
Task.Factory.StartNew(
() =>
{
FindFiles_(root, pattern, option, obs, token);
obs.OnCompleted();
},
token));
}
}