// -------------------------------------------------------------------- // 楽曲情報・番組情報をインポート(1 ファイル分) // -------------------------------------------------------------------- private void ImportInfo <T>(Dictionary <String, List <List <String> > > oCsvs, String oCsvFileName, String oExtractedFolderPath, Int32 oKeyColumnIndex, ref Int32 oTotalAddedRecords) { // 解凍された CSV ファイルがあるか確認 String aExtractedCsvPath = oExtractedFolderPath + oCsvFileName; if (!File.Exists(aExtractedCsvPath)) { return; } Int32 aNumAddedRecords = 0; List <String> aTitle = NklCommon.CsvTitle <T>(); // CSV 読み込み ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, oCsvFileName + " をインポートしています..."); List <List <String> > aCsv = NklCommon.LoadCsv(aExtractedCsvPath, mNicoKaraListerSettings, aTitle.Count + 1); // インポート String aUserCsvPath = NklCommon.UserCsvPath(oCsvFileName); foreach (List <String> aRecord in aCsv) { // ユーザー CSV に既にキー列が存在している場合はインポートしない String aFoundCsvPath; List <String> aFoundRecord = NklCommon.FindCsvRecord(oCsvs, oKeyColumnIndex, aRecord[oKeyColumnIndex], out aFoundCsvPath); if (aFoundRecord != null && !NklCommon.IsSystemCsvPath(aFoundCsvPath)) { continue; } // システム CSV に既に同じレコードが存在している場合はインポートしない if (NklCommon.RecordExists(oCsvs, aRecord, oKeyColumnIndex)) { continue; } // インポートする if (!oCsvs.ContainsKey(aUserCsvPath)) { oCsvs[aUserCsvPath] = new List <List <String> >(); } oCsvs[aUserCsvPath].Add(aRecord); aNumAddedRecords++; } // 保存 if (aNumAddedRecords > 0) { NklCommon.BackupCsv(aUserCsvPath); CsvManager.SaveCsv(aUserCsvPath, oCsvs[aUserCsvPath], "\r\n", Encoding.UTF8, aTitle, true); } // 報告 ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "重複を除く " + aNumAddedRecords + " レコードをインポートしました。"); oTotalAddedRecords += aNumAddedRecords; }
// -------------------------------------------------------------------- // 楽曲情報・番組情報をエクスポート // -------------------------------------------------------------------- private void ExportInfo() { try { // 準備 ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "楽曲情報・番組情報をエクスポートします..."); // テンポラリーフォルダーにコピー String aTempFolder = NklCommon.TempFilePath() + "\\" + NklCommon.FILE_PREFIX_INFO + "\\"; Boolean aExists = false; Directory.CreateDirectory(aTempFolder); List <String> aCsvs = new List <String>(); aCsvs.Add(NklCommon.FILE_NAME_PROGRAM_CSV); aCsvs.AddRange(NklCommon.CreateSongCsvList()); aCsvs.Add(NklCommon.FILE_NAME_PROGRAM_ALIAS_CSV); aCsvs.AddRange(NklCommon.CreateSongAliasCsvList()); foreach (String aCsv in aCsvs) { if (File.Exists(NklCommon.UserCsvPath(aCsv))) { File.Copy(NklCommon.UserCsvPath(aCsv), aTempFolder + aCsv); aExists = true; } } if (!aExists) { throw new Exception("エクスポートする楽曲情報・番組情報がありません。"); } // 圧縮 ZipFile.CreateFromDirectory(aTempFolder, SaveFileDialogExport.FileName, CompressionLevel.Optimal, true); // 報告 ShowLogMessage(TraceEventType.Information, "エクスポートが完了しました。"); } catch (OperationCanceledException) { ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "エクスポートを中止しました。"); } catch (Exception oExcep) { ShowLogMessage(TraceEventType.Error, "エクスポート時エラー:\n" + oExcep.Message); ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }