Exemplo n.º 1
0
        public static FileCanBeOpenedResult FileCanBeOpened(string path, ILogger logger)
        {
            try
            {
                if (IsPathADirectory(path))
                {
                    return(FileCanBeOpenedResult.Success());
                }

                using var zip = ZipFile.Open(path, ZipArchiveMode.Read);
                var records        = zip.Entries.ToList();                                // This would fail if zip is corrupt or not a zip file at all
                var firstFileEntry = records.FirstOrDefault(record => record.Name != ""); // Only files have names in ZipArchiveEntry (per https://stackoverflow.com/questions/40223451/how-to-tell-if-a-ziparchiveentry-is-directory)
                if (firstFileEntry == null)
                {
                    return(FileCanBeOpenedResult.Failure("Zip file appears to not contain any files"));
                }

                using (var stream = firstFileEntry.Open())
                {
                    var reader = new SimpleLinePerLineReader(stream);
                    var line   = reader.ReadLines().FirstOrDefault(); // This would fail if zip is password protected
                }

                return(FileCanBeOpenedResult.Success());
            }
            catch (Exception ex)
            {
                logger?.LogDebug($"{nameof(FileCanBeOpened)} failed with `{ex.Message}`");
                return(FileCanBeOpenedResult.Failure(ex.Message));
            }
        }
 public void ReadTestFileWithPlainLines()
 {
     using (var stream = TestLogFiles.OpenTestFileWithPlainLines())
     {
         var results = new SimpleLinePerLineReader(stream).ReadLines().ToList();
         results.Should().BeEquivalentTo(ExpectedResults);
     }
 }
 public void ReadEmptyTestFile()
 {
     using (var stream = TestLogFiles.OpenEmptyTestFile())
     {
         var results = new SimpleLinePerLineReader(stream).ReadLines().ToList();
         results.Should().Equal(new List <ReadLogLineResult>());
     }
 }