Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-从多个文件中解析年/月,运行程序并在子文件夹中创建新文件(年/月)_C#_File_Parsing_Datetime_Logging - Fatal编程技术网

C#-从多个文件中解析年/月,运行程序并在子文件夹中创建新文件(年/月)

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

我目前有一个程序,我从一个目录中获取现有的日志文件,运行每个日志文件并计算统计数据,然后从中创建一个新文件

日志文件当前命名为: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

等等等等

我不知道如何从文件名中解析年份和月份,然后运行具有相同年份和月份的所有文件,然后让我的程序通过我的循环来创建实际的文件

这是我的密码

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