touch
A small C# utility to modify a file's timestamp. Requires a filename and timestamp in the form YYYYMMDDHHMMSS; e.g. to update the timestamp of myfile,txt to 13:30:29 on 10-Mar-2018, use:
touch myfile.txt 20180310133029
Implementation
Visual Studio solution available on GitHub. Really just this inside your main program class:
static void Main(string[] args) { try { if (args.Length != 2) throw new TouchException("touch usage: touch <filename> <timestamp>"); var filename = args[0]; if (!File.Exists(filename)) throw new TouchException("touch: file \"" + filename + "\" not found"); DateTime mt = ParseTimestamp(args[1]); Console.WriteLine("Set last modified time of \"" + filename + "\" to " + mt.ToString("dd MMM yyyy HH:mm:ss") + "? (Y to apply)"); if (Console.ReadKey(true).Key == ConsoleKey.Y) { File.SetLastWriteTime(filename, mt); Console.WriteLine("Timestamp updated"); return; } Console.WriteLine("No changes made"); } catch (TouchException e) { Console.WriteLine(e.Message); Environment.Exit(1); } catch (Exception e) { Console.WriteLine(e.StackTrace); Environment.Exit(2); } } private static DateTime ParseTimestamp(string ts) { return new DateTime( ParseInt(ts, 0, 4) , ParseInt(ts, 4, 2) , ParseInt(ts, 6, 2) , ParseInt(ts, 8, 2) , ParseInt(ts, 10, 2) , ParseInt(ts, 12, 2) ); } private static int ParseInt(string ts, int off, int len) { try { return int.Parse(ts.Substring(off, len)); } catch (FormatException) { InvalidTimestamp(ts); } catch (ArgumentOutOfRangeException) { InvalidTimestamp(ts); } return -1; // never reached } private static void InvalidTimestamp(string ts) { throw new TouchException("touch: invalid timestamp: " + ts); } private class TouchException : Exception { public TouchException(string message) : base(message) { } }