(精華)2020年9月15日 ASP.NET Core 檔案系統詳解
阿新 • • 發佈:2020-12-30
(精華)2020年9月15日 ASP.NET Core 檔案系統詳解
1.檔案系統遍歷檔案目錄
public static class Sample01 {<!-- --> public static void Run() {<!-- --> var provider = new ServiceCollection() .AddSingleton<IFileProvider>(new PhysicalFileProvider(@"e:\測試資料夾")) .AddSingleton<FileManager>() .BuildServiceProvider(); var fileManager = provider.GetService<FileManager>(); fileManager.Dir(); } public class FileManager {<!-- --> private readonly IFileProvider _fileProvider; public FileManager(IFileProvider fileProvider) {<!-- --> _fileProvider = fileProvider; } public void Dir() {<!-- --> var indent = -1; void Get(string subpath) {<!-- --> indent++; foreach (var fileinfo in _fileProvider.GetDirectoryContents(subpath)) {<!-- --> Console.WriteLine(new string('\t',indent) + fileinfo.Name); if (fileinfo.IsDirectory) {<!-- --> Get($@"{subpath}\{fileinfo.Name}"); } } } Get(""); } } }
2.程式內嵌檔案讀取檔案資訊
public static class Sample02 {<!-- --> public static void Run() {<!-- --> var provider = new ServiceCollection() .AddSingleton<IFileProvider>(new EmbeddedFileProvider(Assembly.GetExecutingAssembly())) .AddSingleton<FileManager>() .BuildServiceProvider(); var fileManager = provider.GetService<FileManager>(); var content = fileManager.ReadAsync("Text.txt").Result; Console.WriteLine(content); } public class FileManager {<!-- --> private readonly IFileProvider _fileProvider; public FileManager(IFileProvider fileProvider) {<!-- --> _fileProvider = fileProvider; } public async Task<string> ReadAsync(string path) {<!-- --> await using var stream = _fileProvider.GetFileInfo(path).CreateReadStream(); var buffer = new byte[stream.Length]; await stream.ReadAsync(buffer, 0, buffer.Length); return Encoding.Default.GetString(buffer); } } }
3.監控檔案系統,檔案發生改變實時通知程式
public static class Sample03 {<!-- --> public static void Run() {<!-- --> var provider = new ServiceCollection() .AddSingleton<IFileProvider>(new PhysicalFileProvider(@"e:\其它")) .AddSingleton<FileManager>() .BuildServiceProvider(); var fileManager = provider.GetService<FileManager>(); fileManager.WatchAsync("Text.txt").Wait(); Console.Read(); } public class FileManager {<!-- --> private readonly IFileProvider _fileProvider; public FileManager(IFileProvider fileProvider) {<!-- --> _fileProvider = fileProvider; } public async Task WatchAsync(string path) {<!-- --> Console.WriteLine(await ReadAsync(path)); ChangeToken.OnChange(() => _fileProvider.Watch(path), async () => {<!-- --> Console.Clear(); Console.WriteLine(await ReadAsync(path)); }); } public async Task<string> ReadAsync(string path) {<!-- --> await using var stream = _fileProvider.GetFileInfo(path).CreateReadStream(); var buffer = new byte[stream.Length]; await stream.ReadAsync(buffer, 0, buffer.Length); return Encoding.Default.GetString(buffer); } } }