您好我正在尝试通过我的应用程序中的RoboCopy方法从日志文件中获取复制的文件数量值。日志文件始终采用以下格式:
开始于:2013年10月10日10:08:51
来源:\ ad \ nas \ Dev_Code \ ITA \ Stats \ 11.6.4.15 \ CFI \ Build \ Dest:C:\ inetpub \ CFI \
Files : *.*
选项:。 / FFT / NFL / TEE / S / E / COPY:DAT / Z / IS / R:5 / W:5
1 \\ad\nas\Dev_Code\ITA\Stats\11.6.4.15\CFI\Build\
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 1 0 0 0
**Files : 1** 1 0 0 0 0
Bytes : 1.62 m 1.62 m 0 0 0 0
Times : 0:00:03 0:00:02 0:00:00 0:00:00
Speed : 607364 Bytes/sec.
Speed : 34.753 MegaBytes/min.
Ended : Thu Oct 10 10:08:59 2013
到目前为止,我能够将文件读入流读取器,但我能做些什么来确保我总是选择文件的最后一个实例:然后是Total列下的值,即1
try
{
// Open file for reading.
using (StreamReader r = new StreamReader(@"C:\LogFile.log"))
{
// 2.
// Read each line until EOF.
string line;
while ((line = r.ReadLine()) != null)
{
// 3.
// Do stuff with line.
if (line.Contains("Files"))
{
String content = line.ToString();
char sep = '\t';
string[] splitContent = content.Split(sep);
Console.WriteLine(splitContent);
}
}
}
}
catch (Exception)
{
throw;
}
min = System.String []
的输出答案 0 :(得分:2)
您只需选择数组中的 second 项目,即
Console.WriteLine(splitContent[1]);
考虑一下,您的行数据看起来像
Files :\t1\t1\t0\t0\t0\t0
当您致电content.Split(sep)
时,您的阵列将显示为
0: "Files :"
1: "1"
2: "1"
3: "0"
4: "0"
5: "0"
6: "0"
因此,如果您根据列进行映射,则始终需要提取位于索引Total
的{{1}}列(1
作为标签列)。
你甚至可以在这里使用emum以获得可读性,例如
0
或使用enum Columns
{
Label,
Total,
Copied,
Skipped,
Mismatch,
Failed,
Extra
}
...
string[] rowData = content.Split('\t');
Console.WriteLine(rowData[(int)Columns.Total]);
来避免演员
const
答案 1 :(得分:0)
试试这个:
foreach(var section in splitContent)
{
Console.Write("{0}\t", section);
}
Console.WriteLine();
答案 2 :(得分:0)
这是我完整的工作示例:
static void Main()
{
try
{
// Open file for reading.
using (StreamReader r = new StreamReader(@"C:\LogFile.log"))
{
// 2.
// Read each line until EOF.
string line;
while ((line = r.ReadLine()) != null)
{
// 3.
// Do stuff with line.
if (line.Contains("Files"))
{
if (!line.Contains("Files : *.*"))
{
String content = line.ToString();
string[] splitContent = System.Text.RegularExpressions.Regex.Replace(content, @"\s+", " ").Split(' ');
//foreach (string s in splitContent)
//Console.WriteLine(s);
Console.WriteLine(splitContent[3]);
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}