private static async Task <IList <FileListRecord> > ReadFromDevice(string path) { if (!File.Exists(path)) { return(new List <FileListRecord>()); } await fileLock.WaitAsync(); try { IList <FileListRecord> records = new List <FileListRecord>(); FileListRecord record = new FileListRecord(); using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var sr = new StreamReader(fs)) using (var tr = new CsvReader(sr, System.Globalization.CultureInfo.InvariantCulture)) { var en = tr.EnumerateRecordsAsync <FileListRecord>(record).GetAsyncEnumerator(); while (await en.MoveNextAsync()) { records.Add(en.Current); } await en.DisposeAsync(); } return(records); } catch { return(null); } finally { fileLock.Release(); } }
private static async Task UpdateFileListData(IList <FileListRecord> items) { for (int i = items.Count - 1; i >= 0; i--) { FileListRecord item = items[i]; FileSystemInfo fsi = null; bool isFile = false; if (isFile = File.Exists(item.Filename)) { fsi = await Utils.CatchAsync <FileInfo, UnauthorizedAccessException>(() => new FileInfo(item.Filename)); } else if (Directory.Exists(item.Filename)) { fsi = await Utils.CatchAsync <DirectoryInfo, UnauthorizedAccessException>(() => new DirectoryInfo(item.Filename)); } if (fsi is null) { items.RemoveAt(i); } else { if (isFile) { item.Size = ((FileInfo)fsi).Length; } item.DateModified = fsi.LastWriteTime.Ticks; item.DateCreated = fsi.CreationTime.Ticks; item.Attributes = (int?)fsi.Attributes; } } }