void Replace(object sender, EventArgs e) { if (string.IsNullOrEmpty(azukiBefore.Text)) { MessageBox.Show( "置換前のテキストが入力されていません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (!fileListView.ListValid) { Progress.Clear(); Find(sender, e); if (Progress.Canceled) { // error message has been already shown return; } } if (fileListView.CheckedItems.Count == 0) { MessageBox.Show( "置換するファイルがありません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (InformAfterTextEmpty && string.IsNullOrEmpty(azukiAfter.Text)) { string msg = "置換後のテキストが入力されていません。置換を実行しますか?\n\n" + string.Format("対象ファイル: {0} 件 ({1} 件中)\nバックアップ: {2}\n正規表現: {3}", fileListView.CheckedItems.Count, fileListView.Items.Count, BackupArgs.Enabled ? "する" : "しない", cbRegex.Checked ? "適用する" : "適用しない"); DialogResult dr = MessageBox.Show( msg, "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (dr != DialogResult.Yes) { return; } } else if (InformBeforeReplace) // 'else if' to avoid inquiring twice in succession { string msg = "置換を開始します。よろしいですか?\n\n" + string.Format("対象ファイル: {0} 件 ({1} 件中)\nバックアップ: {2}\n正規表現: {3}", fileListView.CheckedItems.Count, fileListView.Items.Count, BackupArgs.Enabled ? "する" : "しない", cbRegex.Checked ? "適用する" : "適用しない"); DialogResult dr = MessageBox.Show( msg, "確認", MessageBoxButtons.YesNo, MessageBoxIcon.None); if (dr != DialogResult.Yes) { return; } } btnReplace.Enabled = false; int _fileListView_CheckedItems_Count = fileListView.CheckedItems.Count; if (!fileListView.ListValid) { this.Find(sender, e); if (!fileListView.ListValid) { btnReplace.Enabled = true; return; } } _dirPath = DirPath; _pattern = Pattern; _beforeText = BeforeText; _afterText = AfterText; _inclSubDir = InclSubDir; _regEx = RegexEnabled; _encNumber = EncNumber; _regExMultiline = RegexMultiline; // copy of reference is not approved _fileListView.ListValid = fileListView.ListValid; _fileListView.Items.Clear(); foreach (ListViewItem item in fileListView.Items) { _fileListView.Items.Add(item.Clone() as ListViewItem); } Progress.Clear(); using (BackgroundWorker bw = new BackgroundWorker()) { bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; bw.DoWork += new DoWorkEventHandler(DoReplaceBkgnd); // progress dialog progressDialog = new ProgressDialog(bw, Progress); progressDialog.Text = "置換中..."; bw.RunWorkerAsync(); } ProgressDialogResult result = progressDialog.ShowDialog(); if (_fileListView != null) { fileListView.ListValid = _fileListView.ListValid; fileListView.Items.Clear(); foreach (ListViewItem item in _fileListView.Items) { fileListView.Items.Add(item.Clone() as ListViewItem); } } if (result == ProgressDialogResult.Success) { fileListView.ListValid = _fileListView.ListValid; fileListView.Items.Clear(); foreach (ListViewItem item in _fileListView.Items) { fileListView.Items.Add(item.Clone() as ListViewItem); } if (Progress.ErrorOccured) { Progress.ErrorDescription = "アクセスできないファイルは無視されました。\n" + "バックアップエラーだけであれば、置換は行われています。"; ErrorDialog dialog = new ErrorDialog(Progress); if (dialog.ShowDialog() == DialogResult.OK) { fileListView.ListValid = true; } else { fileListView.ListValid = false; } } btnReplace.Enabled = true; btnReplace.Focus(); if (InformAfterReplace) { int fileNum = fileListView.Items[0].Checked ? fileListView.Items.Count : 0; string msg = "置換が完了しました。\n\n" + string.Format("置換に成功したファイル: {0} 件\n置換に失敗したファイル: {1} 件", _fileListView_CheckedItems_Count - fileListView.CheckedItems.Count, fileListView.CheckedItems.Count); MessageBox.Show(msg, "情報", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (result == ProgressDialogResult.Failure) { Progress.ErrorDescription = "置換に失敗しました。"; ErrorDialog dialog = new ErrorDialog(Progress); dialog.ShowDialog(); btnReplace.Enabled = true; btnReplace.Focus(); } }
void Find(object sender, EventArgs e) { azukiAfter.UpdateNewlineChars(); azukiBefore.UpdateNewlineChars(); if (!Directory.Exists(DirPath)) { MessageBox.Show("存在しないフォルダです。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrEmpty(Pattern)) { MessageBox.Show("フィルタが入力されていません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (InformBeforeTextEmpty && string.IsNullOrEmpty(BeforeText)) { string msg = "置換前のテキストが入力されていません。検索を実行しますか?\n\n" + string.Format("場所: {0}\nサブフォルダ: {1}\nフィルタ: {2}\n文字コード: {3}\n正規表現: {4}", tbDirPath.Text, cbSubDir.Checked ? "含める" : "含めない", tbPattern.Text, comboBoxEnc.SelectedItem.ToString(), cbRegex.Checked ? "適用する" : "適用しない"); DialogResult dr = MessageBox.Show( msg, "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (dr != DialogResult.Yes) { return; } } else if (InformBeforeSearch) // 'else if' to avoid inquiring twice in succession { string msg = "検索を開始します。よろしいですか?\n\n" + string.Format("場所: {0}\nサブフォルダ: {1}\nフィルタ: {2}\n文字コード: {3}\n正規表現: {4}", tbDirPath.Text, cbSubDir.Checked ? "含め" : "含めない", tbPattern.Text, comboBoxEnc.SelectedItem.ToString(), cbRegex.Checked ? "適用する" : "適用しない"); DialogResult dr = MessageBox.Show( msg, "確認", MessageBoxButtons.YesNo, MessageBoxIcon.None); if (dr != DialogResult.Yes) { return; } } fileListView.AzukiBefore = azukiBefore; fileListView.AzukiAfter = azukiAfter; fileListView.RegexEnabled = RegexEnabled; fileListView.RegexOptions = RegexMultiline ? RegexOptions.Multiline : RegexOptions.Singleline; // do not use |= _dirPath = DirPath; _pattern = Pattern; _beforeText = BeforeText; _inclSubDir = InclSubDir; _inclHiddenDir = InclHiddenDir; _inclHiddenFile = InclHiddenFile; _regEx = RegexEnabled; _encNumber = EncNumber; _regExMultiline = RegexMultiline; btnFind.Enabled = false; fileListView.Items.Clear(); Progress.Clear(); using (BackgroundWorker bw = new BackgroundWorker()) { bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; bw.DoWork += new DoWorkEventHandler(DoFindBkgnd); progressDialog = new ProgressDialog(bw, Progress); progressDialog.Text = "検索中..."; bw.RunWorkerAsync(); } ProgressDialogResult result = progressDialog.ShowDialog(); if (result == ProgressDialogResult.Success) { fileListView.Items.Clear(); foreach (ListViewItem item in _fileListView.Items) { fileListView.Items.Add(item.Clone() as ListViewItem); } fileListView.ListValid = _fileListView.ListValid; } btnFind.Enabled = true; if (btnReplace.Enabled) { btnReplace.Focus(); } else { btnFind.Focus(); } if (Progress.Canceled) { Progress.ErrorDescription = "処理が中断されました。"; ErrorDialog dialog = new ErrorDialog(Progress); dialog.ShowDialog(); fileListView.ListValid = false; } else { if (Progress.ErrorOccured) { Progress.ErrorDescription = "アクセスできないファイルまたはフォルダがありました。" + Environment.NewLine + "または、その他のエラーが発生しました。"; ErrorDialog dialog = new ErrorDialog(Progress); dialog.ShowDialog(); if (fileListView.Items.Count > 0 && !string.IsNullOrEmpty(fileListView.Items[0].SubItems[1].Text)) { fileListView.ListValid = true; } else { fileListView.ListValid = false; } } if (InformAfterSearch) { int fileNum = fileListView.Items[0].Checked ? fileListView.Items.Count : 0; string msg = "検索が完了しました。\n\n" + string.Format("見つかったファイル: {0} 件", fileNum); MessageBox.Show(msg, "確認", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }