Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
 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;
         }
     }
 }