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>()); } }