using namespace System::Diagnostics;
using namespace System::IO;
private:static ArrayList^ MyFindPath = gcnew ArrayList();
private:static ArrayList^ MyExtsList = gcnew ArrayList();
private:static array<String^>^ MyDefaultExtensions ={".com", ".pdb", ".exe", ".bat", ".cmd", ".vbs", ".cs", ".vbe", ".js", ".wsf", ".wsh", ".c", ".h", ".cpp",};
private:static array<wchar_t>^ mySemicolon = {';'};
private:static int myExtsCount = 0;
private:static int myDirsCount = 0;
private:static bool myFirstMatchOnly = false;
//添加路径数据
public: static void addElementToList(String^ element, ArrayList^ arraylist)
{
for (int i = 0; i < arraylist->Count; i++)
{
if( 0 == String::Compare(element, (String^)arraylist[i], true))
return;
}
arraylist->Add(element);
}
//添加指定路径数据
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
//添加本程序文件所在目录
System::Diagnostics::Process^ MyCurrentProcess = System::Diagnostics::Process::GetCurrentProcess();
ProcessModule^ MyProcessModule = MyCurrentProcess->MainModule;
String^ MyDir = Path::GetDirectoryName(MyProcessModule->FileName);
if((MyDir->Length > 1) && ("//" == System::Convert::ToString(MyDir[MyDir->Length - 1])))
MyDir->Remove(MyDir->Length -1, 1);
MyFindPath->Add(MyDir);
//添加当前目录和系统目录
String^ MyCurrentDir = Environment::CurrentDirectory;
if((MyCurrentDir->Length > 1) && ("//" == System::Convert::ToString(MyCurrentDir[MyCurrentDir->Length - 1])))
MyCurrentDir->Remove(MyCurrentDir->Length- 1, 1);
addElementToList(MyCurrentDir, MyFindPath);
String^ MySystemDir = Environment::SystemDirectory;
if((MySystemDir->Length > 1) && ("//" == System::Convert::ToString(MySystemDir[MySystemDir->Length - 1])))
MySystemDir->Remove(MySystemDir->Length - 1, 1);
addElementToList(MySystemDir, MyFindPath);
//添加windows目录
String^ MyWindowsDir = Directory::GetParent(MySystemDir)->FullName;
if((MyWindowsDir->Length > 1) && ("//" == System::Convert::ToString(MyWindowsDir[MyWindowsDir->Length - 1])))
MyWindowsDir->Remove(MyWindowsDir->Length - 1, 1);
addElementToList(MyWindowsDir, MyFindPath);
//添加环境变量所指目录
String^ MyPathString = Environment::GetEnvironmentVariable("Path");
if(MyPathString != String::Empty){
array<String^>^ MyPathElements = MyPathString->Split(mySemicolon);
int MyPathElementCount = MyPathElements->GetLength(0);
for(int i = 0; i < MyPathElementCount; i++){
String^ MyElement = System::Convert::ToString(MyPathElements[i]);
if((MyElement->Length > 1) && ("//" == System::Convert::ToString(MyElement[MyElement->Length - 1])))
MyElement->Remove(MyElement->Length - 1, 1);
addElementToList(MyElement, MyFindPath);
}
}
myDirsCount = MyFindPath->Count;
//创建文件扩展名列表
array<String^>^ MyExtensionArray;
String^ MyPathExt = Environment::GetEnvironmentVariable("PathExt");
if(MyPathExt == String::Empty)
MyDefaultExtensions->CopyTo(MyExtensionArray, 0);
else
MyExtensionArray = MyPathExt->Split(mySemicolon);
myExtsCount = MyExtensionArray->Length;
for(int i = 0; i < myExtsCount; i++)
addElementToList(MyExtensionArray[i], MyExtsList);
}
//开始查找
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
this->richTextBox1->Text = "";
this->myFirstMatchOnly = this->checkBox1->Checked;
if(this->textBox1->Text == System::String::Empty)
return;
for(int i = 0; i < myDirsCount; i++){
bool MyExist = false;
String^ MyExtStr = Path::GetExtension(this->textBox1->Text);
if(MyExtStr != String::Empty){
String^ MyFile = String::Format("{0}//{1}", (String^)MyFindPath[i], this->textBox1->Text);
if((MyExist = File::Exists(MyFile)))
//if(MyExist == File::Exists(MyFile))
this->richTextBox1->AppendText(MyFile + "/n");
}
else{
for(int j = 0; j < myExtsCount; j++){
String^ MyFile = String::Format("{0}//{1}{2}", (String^)MyFindPath[i], this->textBox1->Text, MyExtsList);
if((MyExist = File::Exists(MyFile))){
//if(MyExist == File::Exists(MyFile))
this->richTextBox1->AppendText(MyFile + "/n");
if(myFirstMatchOnly)
break;
}
}
}
if(MyExist && myFirstMatchOnly)
break;
}
}