C#-从多个文件中解析年/月,运行程序并在子文件夹中创建新文件(年/月)
我目前有一个程序,我从一个目录中获取现有的日志文件,运行每个日志文件并计算统计数据,然后从中创建一个新文件 日志文件当前命名为:2012-4-24.log 在创建新的统计文件时,它会保留类似的格式,但会添加“-Stats”:2012-4-24-Stats.log 以下是我试图解决的问题:我想为每年和每月创建新目录,这样我就可以拥有如下文件夹结构: DailyStatistics->2012->4->2012-4-24-Stats.log DailyStatistics->2012->5->2012-5-1-Stats.log 等等等等 我不知道如何从文件名中解析年份和月份,然后运行具有相同年份和月份的所有文件,然后让我的程序通过我的循环来创建实际的文件 这是我的密码C#-从多个文件中解析年/月,运行程序并在子文件夹中创建新文件(年/月),c#,file,parsing,datetime,logging,C#,File,Parsing,Datetime,Logging,我目前有一个程序,我从一个目录中获取现有的日志文件,运行每个日志文件并计算统计数据,然后从中创建一个新文件 日志文件当前命名为:2012-4-24.log 在创建新的统计文件时,它会保留类似的格式,但会添加“-Stats”:2012-4-24-Stats.log 以下是我试图解决的问题:我想为每年和每月创建新目录,这样我就可以拥有如下文件夹结构: DailyStatistics->2012->4->2012-4-24-Stats.log DailyStatistics->2012->5->201
class Processor
{
public void ProcessDailyLogFiles()
{
foreach (string fullFileName in Directory.GetFiles(Settings.LogPath))
{
string fileName = Path.GetFileNameWithoutExtension(fullFileName);
new DailyReader().CalculateStatistics(fileName);
new DailyReader().MoveLogFile(fileName);
}
}
}
下节课
public void CalculateStatistics(string filename)
{
string path = Settings.DailyPath;
if (!path.EndsWith(@"\"))
path = path + @"\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string tempFileName = Settings.LogPath + filename + ".log";
string destFileName = path + filename + "-Stats.log";
var statistics = File.ReadLines(tempFileName)
.Where(line => line.StartsWith("Process"))
.Select(line => line.Split('\t'))
.GroupBy(items => items[1])
.Select(g =>
new
{
Division = g.Key,
ZipFiles = g.Sum(i => Convert.ToInt32(i[4])),
Conversions = g.Sum(i => Convert.ToInt32(i[5])),
ReturnedFiles = g.Sum(i => Convert.ToInt32(i[6])),
TotalEmails = g.Sum(i => Convert.ToInt32(i[7]))
});
Log myLog = new Log(destFileName);
statistics
.ToList()
.ForEach(d => myLog.Write(d.Division, d.ZipFiles, d.Conversions, d.ReturnedFiles, d.TotalEmails));
//Add error handlers
myLog.Close();
}
最终日志类
#region Member Variables
StreamWriter dailyStats;
#endregion
public Log(string filename)
{
this.Open(filename);
}
#region Public Static Functions
public void Open(string tempFileName)
{
var sb = new StringBuilder();
if (!File.Exists(tempFileName))
{
dailyStats = File.AppendText(tempFileName);
sb.Append("Division");
sb.Append("\t");
sb.Append("Zip Files");
sb.Append("\t");
sb.Append("Conversions");
sb.Append("\t");
sb.Append("Returned Files");
sb.Append("\t");
sb.Append("Total E-Mails");
sb.Append("\t");
dailyStats.WriteLine(sb.ToString());
}
else
{
dailyStats = new StreamWriter(tempFileName);
}
}
public void Write(string division,
int zipFiles, int conversions, int returnedFiles, int totalEmails)
{
var sb = new StringBuilder();
if (writeLog)
{
sb.Append(division);
sb.Append("\t");
sb.Append(zipFiles);
sb.Append("\t");
sb.Append(conversions);
sb.Append("\t");
sb.Append(returnedFiles);
sb.Append("\t");
sb.Append(totalEmails);
sb.Append("\t");
dailyStats.WriteLine(sb.ToString());
}
}
public void Close()
{
dailyStats.Close();
}
}
谢谢大家现在这会进入我的处理器吗?或者它会进入每日统计功能?谢谢你的帮助,这真是太好了。问题是你想把一个文件名解析成dateparts来创建目录等。你需要在哪个函数中解析文件名,你可以在那里使用?现在这会在我的处理器中吗?或者它会进入每日统计功能?谢谢你的帮助,这真是太好了。问题是你想把一个文件名解析成dateparts来创建目录等等。在哪个函数中你需要解析文件名,你可以在那里使用?
String filename = "2012-4-24.log";
String file = Path.GetFileNameWithoutExtension(filename);
String[] parts = file.Split('-');
if (parts.Length == 3)
{
String year = parts[0];
String month = parts[1];
String day = parts[2];
Console.WriteLine(string.Format("year:{0} - month:{1} - day:{2}", year, month, day));
}