static void Main(string[] args) { string path = ""; ushort titleId = ushort.MaxValue; ushort episodeId = ushort.MaxValue; string inputDb = "index.db"; string outputDb = "index.db"; var results = Parser.Default.ParseArguments <Options>(args) .WithParsed(opt => { if (opt.EpisodeId < ushort.MaxValue && opt.TitleId < ushort.MaxValue) { titleId = opt.TitleId; episodeId = opt.EpisodeId; } if (opt.MovieFileName != null) { path = opt.MovieFileName; } if (opt.InputFileName != null) { inputDb = opt.InputFileName; } if (opt.OutputFileName != null) { outputDb = opt.OutputFileName; } }); if (results.Errors.Count() > 0) { return; } if (!File.Exists(path)) { Console.WriteLine($"{path} が見つかりませんでした。"); return; } ImageInfo[] currentDb = new ImageInfo[] { }; if (File.Exists(inputDb)) { ImageSearch imageSearch = new ImageSearch(); currentDb = imageSearch.LoadFromDb(inputDb); Console.WriteLine($"{inputDb} には {currentDb.Length} 件のデータがあります。"); } var count = currentDb.Where(c => c.TitleId == titleId && c.EpisodeId == episodeId).Count(); if (count > 0) { Console.WriteLine($"TitleId={titleId}, EpisodeId={episodeId} の組み合わせがすでに {count} 件存在しているため続行できません。"); return; } Decoder decoder = new Decoder(path, titleId, episodeId); decoder.ProgressChanged += Decoder_ProgressChanged; decoder.Completed += Decoder_Completed; var outputInfo = decoder.CreateImageInfo(); // 2つの db を結合(TODO: 挿入ソートにする) Array.Resize(ref outputInfo, outputInfo.Length + currentDb.Length); currentDb.CopyTo(outputInfo, outputInfo.Length - currentDb.Length); decoder.Save(outputDb, outputInfo); }