src/BinlogTool/Program.cs (70 lines of code) (raw):
using System;
using System.IO;
using System.Linq;
using Microsoft.Build.Logging.StructuredLogger;
namespace BinlogTool
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine(@"Usage:
binlogtool listtools input.binlog
binlogtool savefiles input.binlog output_path
binlogtool reconstruct input.binlog output_path
binlogtool savestrings input.binlog output.txt
binlogtool search *.binlog search string");
return;
}
var firstArg = args[0];
if (args.Length == 3 && string.Equals(firstArg, "savefiles", StringComparison.OrdinalIgnoreCase))
{
var binlog = args[1];
var outputRoot = args[2];
new SaveFiles(args).Run(binlog, outputRoot);
return;
}
if (args.Length == 3 && string.Equals(firstArg, "reconstruct", StringComparison.OrdinalIgnoreCase))
{
var binlog = args[1];
var outputRoot = args[2];
new SaveFiles(args).Run(binlog, outputRoot, reconstruct: true);
return;
}
if (args.Length == 3 && string.Equals(firstArg, "savestrings", StringComparison.OrdinalIgnoreCase))
{
var binlog = args[1];
var outputFile = args[2];
new SaveStrings().Run(binlog, outputFile);
return;
}
if (args.Length == 2 && string.Equals(firstArg, "listtools", StringComparison.OrdinalIgnoreCase))
{
var binlog = args[1];
new ListTools().Run(binlog);
return;
}
if (firstArg == "search")
{
if (args.Length < 3)
{
Console.Error.WriteLine("binlogtool search *.binlog search string");
return;
}
var binlogs = args[1];
var search = string.Join(" ", args.Skip(2));
Searcher.Search(binlogs, search);
return;
}
Console.Error.WriteLine("Invalid arguments");
}
private static void CompareStrings()
{
var left = Serialization.ReadStringsFromFile(@"C:\temp\1.txt");
var right = Serialization.ReadStringsFromFile(@"C:\temp\2.txt");
var onlyLeft = left.Except(right).ToArray();
var onlyRight = right.Except(left).ToArray();
File.WriteAllLines(@"C:\temp\onlyLeft.txt", onlyLeft);
File.WriteAllLines(@"C:\temp\onlyRight.txt", onlyRight);
}
}
}