示例#1
0
        private static void Parse(ref FileChangeReqs reqsBefore)
        {
            StringBuilder  sb        = new StringBuilder();
            FileChangeReqs reqsAfter = GetFileChangeReqs(reqsBefore.Directory, reqsBefore.FilePattern);

            foreach (FileChangeModel m in reqsAfter.FileChanges)
            {
                var reqBefore = reqsBefore.FileChanges.FirstOrDefault(f => f.FileName.ToLower() == m.FileName.ToLower());
                if (reqBefore == null)
                {
                    sb.AppendLine($"Created File: {Path.GetFileName(m.FileName)} | Lines: {m.NumLines}");
                }
                //Check for modifications.
                else if (reqBefore.NumLines > m.NumLines)
                {
                    sb.AppendLine($"Modified File: -{reqBefore.NumLines - m.NumLines} | {Path.GetFileName(m.FileName)}");
                }
                else if (reqBefore.NumLines < m.NumLines)
                {
                    sb.AppendLine($"Modified File: +{m.NumLines - reqBefore.NumLines} | {Path.GetFileName(m.FileName)}");
                }
            }
            foreach (FileChangeModel m in reqsBefore.FileChanges)
            {
                if (!reqsAfter.FileChanges.Any(f => f.FileName.ToLower() == m.FileName.ToLower()))
                {
                    sb.AppendLine($"Deleted File: {Path.GetFileName(m.FileName)}");
                }
            }
            if (sb.ToString().Length > 0)
            {
                Console.WriteLine(sb.ToString());
            }
            reqsBefore = reqsAfter;
        }
示例#2
0
        private static void ParseEngine(FileChangeReqs reqs)
        {
            TimeSpan startTime = TimeSpan.Zero;
            TimeSpan spanTime  = TimeSpan.FromSeconds(reqs.Seconds);

            System.Threading.Timer timer = new System.Threading.Timer((e) =>
            {
                Parse(ref reqs);
            }, null, startTime, spanTime);
            Console.ReadLine(); //so the console doesn't close.
        }
示例#3
0
        public static void Main(string[] args)
        {
            if (args != null && args.Count() == 2)
            {
                RulesCheck(args[0], args[1]);
                FileChangeReqs reqs = GetFileChangeReqs(args[0], args[1]);

                ParseEngine(reqs);
            }
            else
            {
                //Normally, I would keep my exception strings in the resource file.
                Exception argsException = new Exception("Invalid number of arguments supplied.",
                                                        new Exception("Expected two arguments: a directory and a file pattern."));
                throw argsException;
            }
        }
示例#4
0
        public static FileChangeReqs GetFileChangeReqs(string directory, string pattern)
        {
            int            seconds = int.Parse(ConfigurationManager.AppSettings["NumSeconds"]);
            FileChangeReqs fcr     = new FileChangeReqs(seconds, directory, pattern);

            string[] arrFiles = Directory.GetFiles(directory, pattern, SearchOption.TopDirectoryOnly); //no subdirectories.
            if (arrFiles != null)
            {
                Parallel.ForEach(arrFiles, (file) =>
                {
                    FileChangeModel fcm = new FileChangeModel();
                    fcm.FileName        = file;
                    fcm.NumLines        = GetFileLinesCount(file);
                    fcm.DateModified    = GetFileDateModified(file);
                    fcr.FileChanges.Add(fcm);
                });
            }
            return(fcr);
        }