static void Main(string[] args) { Options options = null; try { ParseCommandlineParameters(args, out options); if (options == null) { throw new ArgumentException(nameof(options)); } } catch (Exception e) { Console.WriteLine(e); } // ReSharper disable once PossibleNullReferenceException using (_logStream = string.IsNullOrWhiteSpace(options.LogFile) ? Console.OpenStandardOutput() : File.OpenWrite(ReplaceWildCards(options.LogFile))) { try { var maxTasks = SetMaxConcurrencyLevel(options); if (options.InputIsList) { _itemsToConvert = new ConcurrentQueue <ConversionItem>(); _itemsConverted = new ConcurrentQueue <ConversionItem>(); WriteToLog($"Reading inputfile '{options.Input}'"); var lines = File.ReadAllLines(options.Input); foreach (var line in lines) { var inputUri = new ConvertUri(line); var outputPath = Path.GetFullPath(options.Output); var outputFile = inputUri.IsFile ? Path.GetFileName(inputUri.AbsolutePath) : FileManager.RemoveInvalidFileNameChars(inputUri.ToString()); _itemsToConvert.Enqueue(new ConversionItem(inputUri, Path.Combine(outputPath, outputFile))); } WriteToLog($"{_itemsToConvert.Count} items read"); if (options.UseMultiThreading) { _workerTasks = new List <Task>(); WriteToLog($"Starting {maxTasks} processing tasks"); for (var i = 0; i < maxTasks; i++) { var i1 = i; _workerTasks.Add(_taskFactory.StartNew(() => ConvertWithTask(options, (i1 + 1).ToString()))); } WriteToLog("Started"); // Waiting until all tasks are finished foreach (var task in _workerTasks) { task.Wait(); } } else { ConvertWithTask(options, null); } // Write conversion information to output file using (var output = File.OpenWrite(options.Output)) { foreach (var itemConverted in _itemsConverted) { var bytes = new UTF8Encoding(true).GetBytes(itemConverted.OutputLine); output.Write(bytes, 0, bytes.Length); } } } else { Convert(options); } Environment.Exit(0); } catch (Exception exception) { WriteToLog(exception.StackTrace + ", " + exception.Message); Environment.Exit(1); } } }
static void Main(string[] args) { try { Options options; PortRangeSettings portRangeSettings; ParseCommandlineParameters(args, out options, out portRangeSettings); var maxTasks = SetMaxConcurrencyLevel(options); if (options.InputIsList) { _itemsToConvert = new ConcurrentQueue <ConversionItem>(); _itemsConverted = new ConcurrentQueue <ConversionItem>(); WriteToLog($"Reading inputfile '{options.Input}'"); var lines = File.ReadAllLines(options.Input); foreach (var line in lines) { var inputUri = new Uri(line); var outputPath = Path.GetFullPath(options.Output); var outputFile = inputUri.Scheme == "file" ? Path.GetFileName(inputUri.AbsolutePath) : FileManager.RemoveInvalidFileNameChars(inputUri.ToString()); _itemsToConvert.Enqueue(new ConversionItem(inputUri, Path.Combine(outputPath, outputFile))); } WriteToLog($"{_itemsToConvert.Count} items read"); if (options.UseMultiThreading) { _workerTasks = new List <Task>(); WriteToLog($"Starting {maxTasks} processing tasks"); for (var i = 0; i < maxTasks; i++) { var i1 = i; _workerTasks.Add(_taskFactory.StartNew(() => ConvertWithTask(options, portRangeSettings, (i1 + 1).ToString()))); } WriteToLog("Started"); // Waiting until all tasks are finished foreach (var task in _workerTasks) { task.Wait(); } } else { ConvertWithTask(options, portRangeSettings, null); } // Write conversion information to output file using (var output = File.OpenWrite(options.Output)) { foreach (var itemConverted in _itemsConverted) { var bytes = new UTF8Encoding(true).GetBytes(itemConverted.OutputLine); output.Write(bytes, 0, bytes.Length); } } } else { Convert(options, portRangeSettings); } Environment.Exit(0); } catch (Exception exception) { WriteToLog(exception.Message); Environment.Exit(1); } }