Changed accessible-directory to cancellable TPL
This commit is contained in:
parent
5b9a6d4633
commit
68c929b7cb
@ -3,19 +3,34 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RyzStudio.IO
|
||||
{
|
||||
public class AccessibleDirectory
|
||||
{
|
||||
|
||||
public static List<string> GetFiles(string path, string pattern, bool searchTopOnly)
|
||||
public static List<string> GetFiles(string path, string pattern, bool searchTopOnly) => GetFilesAsync(path, pattern, searchTopOnly).Result;
|
||||
|
||||
public static Task<List<string>> GetFilesAsync(string path, string pattern, bool searchTopOnly)
|
||||
{
|
||||
CancellationToken cancellationToken = new CancellationToken();
|
||||
|
||||
return GetFilesAsync(path, pattern, searchTopOnly, cancellationToken);
|
||||
}
|
||||
|
||||
public static Task<List<string>> GetFilesAsync(string path, string pattern, bool searchTopOnly, CancellationToken cancellationToken)
|
||||
{
|
||||
return Task.Run<List<string>>(() =>
|
||||
{
|
||||
List<string> fileList = new List<string>();
|
||||
List<string> directoryList = new List<string>();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(pattern)) pattern = "*";
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return fileList;
|
||||
|
||||
directoryList.Add(path);
|
||||
|
||||
while (true)
|
||||
@ -25,6 +40,8 @@ namespace RyzStudio.IO
|
||||
break;
|
||||
}
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return fileList;
|
||||
|
||||
string directory = directoryList.First();
|
||||
directoryList.RemoveAt(0);
|
||||
|
||||
@ -32,6 +49,8 @@ namespace RyzStudio.IO
|
||||
{
|
||||
IEnumerable<string> searchDirList = new List<string>();
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return fileList;
|
||||
|
||||
try
|
||||
{
|
||||
searchDirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly);
|
||||
@ -56,6 +75,8 @@ namespace RyzStudio.IO
|
||||
|
||||
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
|
||||
{
|
||||
if (cancellationToken.IsCancellationRequested) return fileList;
|
||||
|
||||
if (!MatchFileSearchPattern(pattern, Path.GetFileName(item)))
|
||||
{
|
||||
continue;
|
||||
@ -67,11 +88,16 @@ namespace RyzStudio.IO
|
||||
}
|
||||
|
||||
fileList.Add(item);
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return fileList;
|
||||
}
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return fileList;
|
||||
}
|
||||
}
|
||||
|
||||
return fileList;
|
||||
});
|
||||
}
|
||||
|
||||
public static IEnumerable<string> EnumerateFiles(string path, string pattern, bool searchTopOnly)
|
||||
@ -136,13 +162,26 @@ namespace RyzStudio.IO
|
||||
}
|
||||
}
|
||||
|
||||
public static void GetFiles(string path, string pattern, bool searchTopOnly, Func<string, ulong, int, bool> callback)
|
||||
public static void GetFiles(string path, string pattern, bool searchTopOnly, Func<string, ulong, int, bool> callback) => GetFilesAsync(path, pattern, searchTopOnly, callback);
|
||||
|
||||
public static Task GetFilesAsync(string path, string pattern, bool searchTopOnly, Func<string, ulong, int, bool> callback)
|
||||
{
|
||||
CancellationToken cancellationToken = new CancellationToken();
|
||||
|
||||
return GetFilesAsync(path, pattern, searchTopOnly, callback, cancellationToken);
|
||||
}
|
||||
|
||||
public static Task GetFilesAsync(string path, string pattern, bool searchTopOnly, Func<string, ulong, int, bool> callback, CancellationToken cancellationToken)
|
||||
{
|
||||
return Task.Run(() =>
|
||||
{
|
||||
List<string> directoryList = new List<string>();
|
||||
ulong searchCount = 0;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(pattern)) pattern = "*";
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return;
|
||||
|
||||
directoryList.Add(path);
|
||||
searchCount++;
|
||||
|
||||
@ -153,6 +192,8 @@ namespace RyzStudio.IO
|
||||
break;
|
||||
}
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return;
|
||||
|
||||
string directory = directoryList.First();
|
||||
directoryList.RemoveAt(0);
|
||||
|
||||
@ -171,6 +212,8 @@ namespace RyzStudio.IO
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return;
|
||||
|
||||
if (!searchTopOnly)
|
||||
{
|
||||
foreach (string item in searchDirList)
|
||||
@ -189,6 +232,8 @@ namespace RyzStudio.IO
|
||||
|
||||
foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly))
|
||||
{
|
||||
if (cancellationToken.IsCancellationRequested) return;
|
||||
|
||||
if (!MatchFileSearchPattern(pattern, Path.GetFileName(item)))
|
||||
{
|
||||
continue;
|
||||
@ -200,12 +245,21 @@ namespace RyzStudio.IO
|
||||
}
|
||||
|
||||
callback(item, searchCount, directoryList.Count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cancellationToken.IsCancellationRequested) return;
|
||||
}
|
||||
|
||||
public static string GetNextFile(string filepath, string pattern)
|
||||
if (cancellationToken.IsCancellationRequested) return;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static string GetNextFile(string filepath, string pattern) => GetNextFileAsync(filepath, pattern).Result;
|
||||
|
||||
public static Task<string> GetNextFileAsync(string filepath, string pattern)
|
||||
{
|
||||
return Task.Run(() =>
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(filepath)) return null;
|
||||
|
||||
@ -240,9 +294,14 @@ namespace RyzStudio.IO
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
public static string GetPreviousFile(string filepath, string pattern)
|
||||
public static string GetPreviousFile(string filepath, string pattern) => GetPreviousFileAsync(filepath, pattern).Result;
|
||||
|
||||
public static Task<string> GetPreviousFileAsync(string filepath, string pattern)
|
||||
{
|
||||
return Task.Run(() =>
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(filepath)) return null;
|
||||
|
||||
@ -275,6 +334,7 @@ namespace RyzStudio.IO
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
public static bool IsAccessible(string path)
|
||||
|
Loading…
Reference in New Issue
Block a user