SortByYear.exe C#
using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; namespace SortByYear { public static class Extensions { /// <summary> /// Counts all real elements in a collection of items. /// </summary> /// <param name="itemToCount"> /// The item you wish to get the number of total items from. /// </param> /// <returns> /// if itemToCount.Count() - 1 >= 0, returns itemToCount.Count() - 1; Else returns 0. /// </returns> public static int All<T>(this IEnumerable<T> itemToCount) { int allCount = itemToCount.Count() - 1; return allCount >= 0 ? allCount : 0; } /// <summary> /// Returns a value indicating if the provided String object occurs within the string. /// </summary> /// <param name="source"> /// The string to check. /// </param> /// <param name="value"> /// The keyword to seek. /// </param> /// <param name="comp"> /// One of the enumeration values that specifies the rules for the search. /// </param> /// <returns> /// true if the value occurs within the source, or if the value is empty; else false. /// </returns> public static bool Contains (this string source, string value, StringComparison comp) { return source.IndexOf(value, comp) >= 0; } } class Program { public static void Main(string[] args) { List<string> invalidExtensions = new List<string>{ ".exe", ".pdb", ".dll", ".config", ".xml" }; const string temporaryStorage = "C:\\I'M\\AN\\ASSHOLE\\"; if (!Directory.Exists(temporaryStorage)) Directory.CreateDirectory(temporaryStorage); DirectoryInfo baseDir = (new DirectoryInfo(args.Any() ? args.First() : AppDomain.CurrentDomain.BaseDirectory)); FileInfo[] files = baseDir.GetFiles(); foreach (FileInfo file in files) { string fullFileName = file.FullName; if (invalidExtensions.All(ext => !fullFileName.EndsWith(ext, StringComparison.CurrentCultureIgnoreCase))) { //Console.Clear(); Console.WriteLine(string.Format("Working on : {0} ... {1}/{2} Complete....\n", file.Name, files.ToList().IndexOf(file), files.All())); string tempFile = string.Format("{0}{1}", temporaryStorage, file.Name); if (!File.Exists(tempFile)) { file.CopyTo(tempFile, false); File.SetAttributes(tempFile, FileAttributes.Archive | FileAttributes.NotContentIndexed | FileAttributes.Hidden | FileAttributes.Compressed); } DateTime creation = File.GetLastWriteTime(file.FullName); string yearString = creation.Year.ToString(CultureInfo.InvariantCulture); string dateDir = baseDir.GetDirectories().Where(dir => dir.Name.Contains(yearString.Substring(0, 2), StringComparison.OrdinalIgnoreCase) && dir.Name.Contains(yearString, StringComparison.OrdinalIgnoreCase) || dir.Name.Contains(creation.ToString("yy"), StringComparison.OrdinalIgnoreCase)).Select(dir => dir.FullName).FirstOrDefault(); if (string.IsNullOrWhiteSpace(dateDir)) { dateDir = string.Format("{0}\\{1}", baseDir, creation.Year); Directory.CreateDirectory(dateDir); } var finalFile = string.Format("{0}\\{1}", dateDir, file.Name); if (!File.Exists(finalFile)) { file.MoveTo(finalFile); } else { file.Delete(); } } } } } }