Ejemplo n.º 1
0
        // --------------------------------------------------------------------
        // 楽曲情報・番組情報をインポート(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;
        }
Ejemplo n.º 2
0
        // --------------------------------------------------------------------
        // 楽曲情報・番組情報をエクスポート
        // --------------------------------------------------------------------
        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);
            }
        }