#pragma region "Method"
// フォルダが存在すれば true を、存在しなければ false を返す。
// あえて作らなくてもよかった関数。
private: System::Boolean checkFolder(String ^targetDirectory) {
if (System::IO::Directory::Exists(targetDirectory)) {
return true;
} else {
return false;
}
}
// 指定されたディレクトリ以下の.mmファイルを、参照型引数のArrayListに追加する。
private: System::Void getMMFiles(String ^targetDirectory, ArrayList^ fileList) {
array<String^>^ files = System::IO::Directory::GetFiles(targetDirectory, L"*.mm");
for each (String ^file in files) {
fileList->Add(file);
}
array<String^>^ directories = System::IO::Directory::GetDirectories(targetDirectory);
for each (String^ directory in directories) {
getMMFiles(directory, fileList);
}
return;
}
// 指定されたファイルの中を検索し、ヒットしたら参照型引数のDataGridViewに表示する。
private: System::Void searchFile(String^ fileName, String^ words, Windows::Forms::DataGridView ^dataGrid) {
String^ text = L"";
array<String^> ^rowValue;
reader = gcnew XmlTextReader(fileName);
while (reader->Read()) {
if (reader->NodeType == XmlNodeType::Element && reader->Name == L"node") {
if (text = reader->GetAttribute(L"TEXT")) {
if (text->Contains(words)) {
rowValue = gcnew array<String^>(dataGrid->Columns->Count);
rowValue[0] = fileName;
rowValue[1] = text;
rowValue[2] = System::IO::Directory::GetParent(fileName)->FullName;
hitList->Rows->Add(rowValue);
}
}
}
}
text = nullptr;
reader->Close();
}
#pragma endregion
#pragma region "Event"
// 検索ボタンクリック時の処理。ファイルを検索して表示する。
private: System::Void searchButton_Click(System::Object^ sender, System::EventArgs^ e) {
String ^searchWord = wordsComboBox->Text;
searchWord = System::Web::HttpUtility::HtmlEncode(searchWord);
if (!checkFolder(folderPath->Text)) {
MessageBox::Show(L"Target Folder doesn't Exist.", "Error", MessageBoxButtons::OK, MessageBoxIcon::Warning);
return;
}
hitList->Rows->Clear();
fileList = gcnew ArrayList();
getMMFiles(folderPath->Text, fileList);
for each (String^ file in fileList) {
searchFile(file, searchWord, hitList);
}
return;
}
// フォルダ指定ダイアログの表示。
private: System::Void folderBrowseButton_Click(System::Object^ sender, System::EventArgs^ e) {
if (checkFolder(folderPath->Text)) {
targetDialog->SelectedPath = folderPath->Text;
}
if (targetDialog->ShowDialog() == Windows::Forms::DialogResult::OK) {
folderPath->Text = targetDialog->SelectedPath;
}
}
#pragma endregion