public ExportResultPack Export(OutputFormat format, IEnumerable <ISearchResult> result, ServiceKind serviceKind) { ExportResultPack pack = new ExportResultPack(); if (format.HasFlag(OutputFormat.Json)) { string folder = SettingManager.ExportOptionSetting.JsonFolderLocation; string fileName = SettingManager.ExportOptionSetting.JsonFileName; if (fileName.IsNullOrEmpty()) { AddLog("파일을 Json 형식으로 내보내기 실패했습니다. [파일명 입력란이 비어있습니다.]", TaskLogType.Failed); Dispatcher.Invoke(() => pack.JsonExportResult = JsonExportResult.Fail_FileNameNull); } else { if (Directory.Exists(folder)) { try { string fullPath = Path.Combine(folder, $"{fileName}{GetServiceString(serviceKind)}.json"); if (ExportManager.JsonExport(fullPath, result, SettingManager.ExportOptionSetting.JsonSort)) { AddLog($"Json으로 성공적으로 내보냈습니다. 저장 위치 : {fullPath}", TaskLogType.Complete); pack.JsonExportResult = JsonExportResult.Success; } else { AddLog($"Json으로 내보낼 파일 위치에 접근 실패했습니다. 위치 : {fullPath}", TaskLogType.Failed); pack.JsonExportResult = JsonExportResult.Fail_FileAccessDenied; } } catch (Exception ex) { AddLog($"Json으로 내보내던 중 알 수 없는 오류가 발생했습니다.{Environment.NewLine}{Environment.NewLine}{ex.ToString()}", TaskLogType.System); pack.JsonExportResult = JsonExportResult.Unknown; } } else { if (folder.IsNullOrEmpty()) { AddLog("파일을 Json 형식으로 내보내기 실패했습니다. [폴더 입력란이 비어있습니다.]", TaskLogType.Failed); pack.JsonExportResult = JsonExportResult.Fail_FileDirectoryNull; } else if (!Directory.Exists(folder)) { AddLog("파일을 Json 형식으로 내보내기 실패했습니다. [해당하는 경로가 없습니다.]", TaskLogType.Failed); pack.JsonExportResult = JsonExportResult.Fail_FileDirectoryNotExists; } } } } if (format.HasFlag(OutputFormat.CSV)) { string folder = SettingManager.ExportOptionSetting.CSVFolderLocation; string fileName = SettingManager.ExportOptionSetting.CSVFileName; if (fileName.IsNullOrEmpty()) { AddLog("파일을 CSV 형식으로 내보내기 실패했습니다. [파일명 입력란이 비어있습니다.]", TaskLogType.Failed); pack.CSVExportResult = CSVExportResult.Fail_FileNameNull; } else { if (Directory.Exists(folder)) { try { string fullPath = Path.Combine(folder, $"{fileName}{GetServiceString(serviceKind)}.csv"); if (ExportManager.CSVExport(fullPath, result)) { AddLog($"CSV로 성공적으로 내보냈습니다. 저장 위치 : {fullPath}", TaskLogType.Complete); pack.CSVExportResult = CSVExportResult.Success; } else { AddLog($"CSV로 내보낼 파일 위치에 접근 실패했습니다. 위치 : {fullPath}", TaskLogType.Failed); pack.CSVExportResult = CSVExportResult.Fail_FileAccessDenied; } } catch (Exception ex) { AddLog($"CSV로 내보내던 중 알 수 없는 오류가 발생했습니다.{Environment.NewLine}{Environment.NewLine}{ex.ToString()}", TaskLogType.System); pack.CSVExportResult = CSVExportResult.Unknown; } } else { if (folder.IsNullOrEmpty()) { AddLog("파일을 CSV 형식으로 내보내기 실패했습니다. [폴더 입력란이 비어있습니다.]", TaskLogType.Failed); pack.CSVExportResult = CSVExportResult.Fail_FileDirectoryNull; } else if (!Directory.Exists(folder)) { AddLog("파일을 CSV 형식으로 내보내기 실패했습니다. [해당하는 경로가 없습니다.]", TaskLogType.Failed); pack.CSVExportResult = CSVExportResult.Fail_FileDirectoryNotExists; } } } } if (format.HasFlag(OutputFormat.MySQL)) { pack.MySQLExportResult = MySQLExportResult.NotSet; MySQLFormat <ISearchResult> mySQLFormat = null; try { if (SettingManager.ExportOptionSetting.MySQLManualInput) { if (SettingManager.ExportOptionSetting.MySQLConnString.IsNullOrEmpty()) { AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 연결문이 입력되지 않았습니다.]", TaskLogType.Failed); pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData; } if (pack.MySQLExportResult == MySQLExportResult.NotSet) { mySQLFormat = new MySQLFormat <ISearchResult>(SettingManager.ExportOptionSetting.MySQLConnString); } } else { if (SettingManager.ExportOptionSetting.MySQLConnAddr.IsNullOrEmpty()) { AddLog("파일을 MySQL로 내보내기 실패했습니다. [연결 주소가 입력되지 않았습니다.]", TaskLogType.Failed); pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData; } else if (SettingManager.ExportOptionSetting.MySQLDatabaseName.IsNullOrEmpty()) { AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 이름이 입력되지 않았습니다.]", TaskLogType.Failed); pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData; } else if (SettingManager.ExportOptionSetting.MySQLUserID.IsNullOrEmpty()) { AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 사용자 이름이 입력되지 않았습니다.]", TaskLogType.Failed); pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData; } else if (SettingManager.ExportOptionSetting.MySQLUserPassword.IsNullOrEmpty()) { AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 사용자 비밀번호가 입력되지 않았습니다.]", TaskLogType.Failed); pack.MySQLExportResult = MySQLExportResult.Fail_NotEnoughConnectData; } if (pack.MySQLExportResult == MySQLExportResult.NotSet) { mySQLFormat = new MySQLFormat <ISearchResult>(SettingManager.ExportOptionSetting.MySQLConnAddr, SettingManager.ExportOptionSetting.MySQLUserID, SettingManager.ExportOptionSetting.MySQLUserPassword, SettingManager.ExportOptionSetting.MySQLDatabaseName); } } } catch (Exception) { } if (mySQLFormat == null) { AddLog("파일을 MySQL로 내보내기 실패했습니다. [데이터베이스 연결 정보중 하나가 잘못되었습니다.]", TaskLogType.Failed); } else { try { ExportManager.MySQLExport(result, mySQLFormat); AddLog("MySQL로 성공적으로 내보냈습니다.", TaskLogType.Complete); pack.MySQLExportResult = MySQLExportResult.Success; } catch (Exception ex) { AddLog("파일을 MySQL로 내보내기 실패했습니다. [알 수 없는 오류가 발생했습니다.]", TaskLogType.Failed); AddLog(ex.ToString(), TaskLogType.Failed); pack.MySQLExportResult = MySQLExportResult.Fail_UnkownError; } } } if (format.HasFlag(OutputFormat.AccessDB)) { string folder = SettingManager.ExportOptionSetting.AccessFolderLocation; string fileName = SettingManager.ExportOptionSetting.AccessFileName; if (fileName.IsNullOrEmpty()) { AddLog("파일을 Access DB 형식으로 내보내기 실패했습니다. [파일명 입력란이 비어있습니다.]", TaskLogType.Failed); pack.AccessExportResult = AccessExportResult.Fail_FileNameNull; } else { if (Directory.Exists(folder)) { try { string fullPath = Path.Combine(folder, $"{fileName}.accdb"); if (ExportManager.AccessDBExport(fullPath, result)) { AddLog($"Access DB로 성공적으로 내보냈습니다. 저장 위치 : {fullPath}", TaskLogType.Complete); pack.AccessExportResult = AccessExportResult.Success; } else { AddLog($"Access DB로 내보낼 파일 위치에 접근 실패했습니다. 위치 : {fullPath}", TaskLogType.Failed); pack.AccessExportResult = AccessExportResult.Fail_FileAccessDenied; } } catch (Exception ex) { AddLog($"파일을 Access DB로 내보내기 실패했습니다. [알 수 없는 오류가 발생했습니다.]", TaskLogType.Failed); AddLog(ex.ToString(), TaskLogType.Failed); pack.AccessExportResult = AccessExportResult.Unknown; } } else { if (folder.IsNullOrEmpty()) { AddLog("파일을 Access DB 형식으로 내보내기 실패했습니다. [폴더 입력란이 비어있습니다.]", TaskLogType.Failed); pack.AccessExportResult = AccessExportResult.Fail_FileDirectoryNull; } else if (!Directory.Exists(folder)) { AddLog("파일을 Access DB 형식으로 내보내기 실패했습니다. [해당하는 경로가 없습니다.]", TaskLogType.Failed); pack.AccessExportResult = AccessExportResult.Fail_FileDirectoryNotExists; } } } } return(pack); }