我想在文本文件中搜索包含“Performance Stats:”的行,然后打印接下来的 20 行左右,因为它们是性能统计表。我正在使用 Streamreader。
string pathToFile = "\\host\c$\temp\logs\myPerformanceFile.txt"
using (var filestream = new FileStream(pathToFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var streamReader = new StreamReader(filestream, Encoding.Default))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (line.Contains("Performance Stats:"))
{
Console.WriteLine(line)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图找到每个统计数据的标题栏。但 20 行看起来有点混乱,例如,我正在使用相同的搜索参数解析文件中有 5 个表。但我只想要其中一个表中的数据。
if (line.Contains("Timings:"))
{
Console.WriteLine(line)
}
if (line.Contains("Downloads:"))
{
Console.WriteLine(line)
}
if (line.Contains("Reset"))
{
Console.WriteLine(line)
}
Run Code Online (Sandbox Code Playgroud)
我会使用File.ReadLines它也在引擎盖下“流式传输”行,因此不会一次读取所有行。您可以使用 LINQ 来简化它并返回自定义类PerformanceStats:
public class PerformanceStats
{
public string Timings{get; set;}
public string Downloads{get; set;}
public string Reset{get; set;}
}
void Main()
{
PerformanceStats stats = GetPerformanceStats(@"\\host\c$\temp\logs\myPerformanceFile.txt");
}
static PerformanceStats GetPerformanceStats(string filePath)
{
if(!System.IO.File.Exists(filePath))
{
return null;
}
StringComparison comparer = StringComparison.InvariantCultureIgnoreCase;
string[] properties = {"Timings:", "Downloads:", "Reset:"};
List<string> lines = System.IO.File.ReadLines(filePath)
.SkipWhile(line => !line.Contains("Performance Stats:", comparer))
.Take(20) // or 21 since it starts at the "Performance Stats"-line
.Where(line => properties.Any(p => line.Contains(p, comparer)))
.ToList();
return new PerformanceStats
{
Timings = lines.FirstOrDefault(l => l.Contains("Timings:", comparer)),
Downloads = lines.FirstOrDefault(l => l.Contains("Downloads:", comparer)),
Reset = lines.FirstOrDefault(l => l.Contains("Reset:", comparer))
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |