أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية مجلدات بحث بشكل متكرر باستخدام Visual C++

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

307009
للحصول على إصدار Microsoft Visual Basic .NET من هذه المقالة، راجع 306666.
للحصول على Microsoft C# .NET راجع 303974 نسخة من هذه المقالة.

تشير هذه المقالة إلى مساحات أسماء Microsoft .NET Framework فئة مكتبة التالية:
  • System.IO
  • System.ComponentModel
  • System.Windows.Forms
  • System.Drawing

في هذه المهمة

الموجز
توضح هذه المقالة خطوة بخطوة كيفية إلى بشكل متكرر الفرعية البحث عن الملفات, بدءاً من مجلد الجذر، باستخدام رمز. تُعرف هذه المهمة إلى الدليل العودية. يمكنك تحديد سلسلة بحث بحيث يمكنك البحث عن الملفات التي تطابق معايير معينة. توضيح كل جزء من التعليمات البرمجية في هذه المقالة ثم يتم أيضاً توفير نموذج التعليمات برمجية عمل.

الدليل العودية مهمة I/O شائعة للمطورين. كائن FileSystemObject تسهيل هذه المهمة طراز كائن المكون (COM) أسهل في Visual C++ .NET 2002 البرامج ولكن هذه المهمة. تشبه الكائن FileSystemObject توفر الفئات في مساحة اسم System.IO طريقةً موجهة إلى الوصول إلى الملفات والمجلدات.

متطلبات

توضح القائمة التالية الأجهزة الموصى بها برامج البنية الأساسية للشبكة و حزم الخدمات التي تحتاجها:
  • 2005 C++ .NET Microsoft Visual C++ أو Visual Microsoft

تمكين العودية الدليل

فئات معالجة الدلائل والملفات الموجودة في مساحة الاسم System::IO. قبل بدء العمل على هذه الفئات بإضافة التعليمة البرمجية التالية:
using <mscorlib.dll>using namespace System;using namespace System::IO;
مساحة الاسم System::IO يوفر خيارات العديد من العمل مع الملفات مع المجلدات. يوفر مساحة الاسم System::IO ليس فقط للفئات يمكنك إنشاء مثيل ولكن كما يوفر فئات الأداة المساعدة الدلائل والملفات. تتضمن هذه الفئات ثابتة الطرق التي يمكنك الاتصال دون الحاجة إلى تعريف متغير من هذا النوع. على سبيل المثال، يمكنك استخدام فئة الدليل للحصول على المجلدات الفرعية للمجلد.

يستخدم التعليمة البرمجية التالية أسلوب GetDirectories ثابتة للفئة دليل بإرجاع صفيف سلاسل. يحتوي هذا الصفيف على مسارات المجلدات إلى المجلدات الفرعية للمجلد C:\ إذا كان هناك أيِ:
String* directories[] = Directory::GetDirectories("C:\\");				
فئة الدليل يحتوي أيضاً على أسلوب GetFiles. يمكنك استخدام GetFiles لاسترداد لصفيف سلسلة من الملفات التي تطابق معايير معينة. نموذج التعليمات البرمجية التالي يستخدم الأسلوب GetFiles لاسترداد كافة الملفات في المجلد C:\ بملحق اسم ملف .dll:
String* files[] = Directory::GetFiles("C:\\", "*.dll");				
يمكنك استخدام الأسلوب GetDirectories والأسلوب GetFiles فئة الدليل بشكل متكرر للبحث عن الملفات التي تطابق سلسلة البحث. استخدم الأسلوب التالي لإجراء في العودية:
	 void DirSearch(String* sDir)	 {		 try		 {			 // Find the subfolders in the folder that is passed in.			 String* d[] = Directory::GetDirectories(sDir);			 int numDirs = d->get_Length();			 			 for (int i=0; i < numDirs; i++)			 {				 // Find all the files in the subfolder.				 String* f[] = Directory::GetFiles(d[i],textBox1->Text);				 int numFiles = f->get_Length();				 for (int j=0; j < numFiles; j++)				 {					 listBox1->Items->Add(f[j]);				 }				 DirSearch(d[i]);			 }		 }		 catch (System::Exception* e)		 {			 MessageBox::Show(e->Message);		 }	 }
التعليمات البرمجية السابقة بتمرير سلسلة إلى الدالة DirSearch. هذه القيمة سلسلة هو المسار الكامل للمجلد الذي تريد البحث. يمكنك استخدام الأسلوب GetDirectories لاسترداد المجلدات الفرعية للمجلد التي يتم تمريرها إلى الإجراء الخاص بك. لأن الأسلوب GetDirectories بإرجاع صفيف ، يمكنك استخدام عبارة عن تكرار عبر كل مجلد فرعي. لكل مجلد فرعي استخدام الأسلوب GetFiles تكرار الملفات في هذا المجلد. يتم تمرير قيمة مربع النص على النموذج الخاص بك إلى أسلوب GetFiles. مربع النص يحتوي على سلسلة البحث الذي يقوم بتصفية النتائج التي إرجاع الأسلوب GetFiles. عندما الملف يطابق معايير البحث ، تتم إضافتها إلى مربع القائمة. لكل مجلد فرعي يوجد استدعاء دالة DirSearch مرة أخرى ثم ثم تمرير مجلد فرعي. يمكنك استخدام هذه المكالمة العودية للبحث في كافة المجلدات الفرعية من المجلد الجذر الذي تحدده.

إنشاء في نموذج

  1. بدء تشغيل Microsoft Visual Studio .NET 2003 أو Microsoft Visual Studio 2005.
  2. من القائمة ملف، أشر إلى جديد ثم انقر فوق المشروع.
  3. ضمن أنواع Project ، انقر فوق Visual C++ .NET.

    ملاحظة في Microsoft Visual C++ 2005 ، يتم تغيير Visual C++ .NET إلى Visual C++.
  4. ضمن قوالب ، انقر فوق تطبيق نماذج Windows (.NET).
  5. في المربع الاسم، اكتب RecursiveSearchCPP. في موقع المربع اكتب C:\ فيه ثم انقر فوق موافق.
  6. افتح النموذج Form1 في تصميم وعرض ثم اضغط F4 لفتح الإطار "خصائص".
  7. في الإطار "خصائص" ، قم بتوسيع المجلد الحجم. في حقل العرض اكتب 700. في الحقل الارتفاع اكتب 320.
  8. إضافة عنصري تحكم التسمية و عنصر تحكم مربع نص واحد عنصر تحكم تحرير وسرد عنصر تحكم ListBox و عنصر تحكم زر إلى النموذج Form1 ".
  9. في الإطار "خصائص" ، بتغيير الموقعحجمTabIndex وخصائص النص كما يلي:
    عنصر تحكم معرّفموقعحجمTabIndexالنص
    label18, 16144, 165البحث عن الملفات التي تحتوي:
    textBox18, 40120 ، 204*.dll
    label28, 96120 ، 253البحث في:
    button1608 ، 24875 ، 250&البحث
    listBox1152, 8530 ، 2251
    comboBox18, 128120 ، 252c:\\
  10. في أسلوب InitializeComponent لمربع التحرير والسرد بإضافة التعليمة البرمجية التالية بالسرد كافة محركات شبكة متوفرة على جهاز الكمبيوتر:
    // Enlist all the network drives that are available on the computer.String* p_logicalDrives[] = __gc new String*[];comboBox1->Items->Clear();p_logicalDrives = Directory::GetLogicalDrives();int numDrives = p_logicalDrives->get_Length();for (int i=0; i< numDrives; i++){	comboBox1->Items->Add(p_logicalDrives[i]);}
  11. انقر نقراً مزدوجاً فوق زر البحث ثم قم بلصق التعليمة البرمجية التالية في الأسلوب:
    // Clear the list box.listBox1->Items->Clear();// You do not have the option to change the values of the files to be searched// until the search is completed. Therefore, the following value is false.textBox1->Enabled = false;comboBox1->Enabled = false;button1->Text = S"Searching...";this->Cursor = Cursors::WaitCursor;Application::DoEvents();// Callthe recursive search method.DirSearch(comboBox1->Text);button1->Text = S"Search";this->Cursor = Cursors::Default;// After the search is completed, the search criteria is enabled //and you can add other search criteria to search the files recursively.textBox1->Enabled = true;comboBox1->Enabled = true;
  12. لإنشاء التطبيق اضغط CTRL + F5 لإنشاء.
  13. قم بتشغيل التطبيق.

إكمال نموذج التعليمات البرمجية

// Form1.h#pragma oncenamespace RecursiveSearchCPP{	using namespace System;	using namespace System::ComponentModel;	using namespace System::Collections;	using namespace System::Windows::Forms;	using namespace System::Data;	using namespace System::Drawing;	using namespace System::IO;	/// <summary> 	/// Summary for Form1	///	/// WARNING: If you change the name of this class, you must change the 	///          Resource File Name property for the managed resource compiler tool 	///          that is associated with all .resx files that this class depends on.  Otherwise,	///          the designers will not be able to interact correctly with localized	///          resources that are associated with this form.	/// </summary>	public __gc class Form1 : public System::Windows::Forms::Form	{		public:		Form1(void)		{			InitializeComponent();		}  	protected:		void Dispose(Boolean disposing)		{			// Form::Dispose(Disposing);			if (disposing && components)			{				components->Dispose();			}			__super::Dispose(disposing);		}	private: System::Windows::Forms::Label *  label1;	private: System::Windows::Forms::TextBox *  textBox1;	private: System::Windows::Forms::Label *  label2;	private: System::Windows::Forms::Button *  button1;	private: System::Windows::Forms::ListBox *  listBox1;	private: System::Windows::Forms::ComboBox *  comboBox1;	private:		/// <summary>		/// This is the required designer variable.		/// </summary>		System::ComponentModel::Container * components;		/// <summary>		/// This is the required method for Designer support. Do not modify		/// the contents of this method with the code editor.		/// </summary>		void InitializeComponent(void)		{			this->label1 = new System::Windows::Forms::Label();			this->textBox1 = new System::Windows::Forms::TextBox();			this->label2 = new System::Windows::Forms::Label();			this->button1 = new System::Windows::Forms::Button();			this->listBox1 = new System::Windows::Forms::ListBox();			this->comboBox1 = new System::Windows::Forms::ComboBox();			this->SuspendLayout();			// 			// label1			// 			this->label1->Location = System::Drawing::Point(8, 16);			this->label1->Name = S"label1";			this->label1->Size = System::Drawing::Size(144, 16);			this->label1->TabIndex = 5;			this->label1->Text = S"Search for files containing:";			// 			// textBox1			// 			this->textBox1->Location = System::Drawing::Point(8, 40);			this->textBox1->Name = S"textBox1";			this->textBox1->Size = System::Drawing::Size(120, 20);			this->textBox1->TabIndex = 4;			this->textBox1->Text = S"*.dll";			// 			// label2			// 			this->label2->Location = System::Drawing::Point(8, 96);			this->label2->Name = S"label2";			this->label2->Size = System::Drawing::Size(120, 23);			this->label2->TabIndex = 3;			this->label2->Text = S"Look in:";			// 			// button1			// 			this->button1->Location = System::Drawing::Point(608, 248);			this->button1->Name = S"button1";			this->button1->TabIndex = 0;			this->button1->Text = S"&Search";			this->button1->Click += new System::EventHandler(this, button1_Click);			// 			// listBox1			// 			this->listBox1->Location = System::Drawing::Point(152, 8);			this->listBox1->Name = S"listBox1";			this->listBox1->Size = System::Drawing::Size(530, 225);			this->listBox1->TabIndex = 1;			// 			// comboBox1			//			// Enlist all the network drives that are available on the computer.			//			String* p_logicalDrives[] = __gc new String*[];			comboBox1->Items->Clear();			p_logicalDrives = Directory::GetLogicalDrives();	        int numDrives = p_logicalDrives->get_Length();			for (int i=0; i< numDrives; i++)			{				comboBox1->Items->Add(p_logicalDrives[i]);			}			this->comboBox1->Location = System::Drawing::Point(8, 128);			this->comboBox1->Name = S"comboBox1";			this->comboBox1->Size = System::Drawing::Size(120, 25);			this->comboBox1->TabIndex = 2;			this->comboBox1->Text = S"C:\\";			// 			// Form1			// 			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);			this->ClientSize = System::Drawing::Size(688, 286);			this->Controls->Add(this->comboBox1);			this->Controls->Add(this->listBox1);			this->Controls->Add(this->button1);			this->Controls->Add(this->label2);			this->Controls->Add(this->textBox1);			this->Controls->Add(this->label1);			this->Name = S"Form1";			this->Text = S"Form1";			this->ResumeLayout(false);		}	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)	 {  		//Clears the list box		  		listBox1->Items->Clear();  		// You do not have option to change the values of the files to be searched  		// until the search is completed. Therefore, the value of the following is false. 	 	textBox1->Enabled = false;  		comboBox1->Enabled = false; 	 	button1->Text = S"Searching..."; 		 this->Cursor = Cursors::WaitCursor;  		Application::DoEvents();  		// Call the recursive search method.  		DirSearch(comboBox1->Text);  		button1->Text = S"Search";  		this->Cursor = Cursors::Default;    		// After the search is completed, the search criteria is enabled   		// and you can add other search criteria to search the files recursively.  		textBox1->Enabled = true;  		comboBox1->Enabled = true;	 }	 void DirSearch(String* sDir)	 {		 try		 {			 // Find the subfolders in the folder that is passed in.			 String* d[] = Directory::GetDirectories(sDir);			 int numDirs = d->get_Length();			 			 for (int i=0; i < numDirs; i++)			 {				 // Find all the files in the subfolder.				 String* f[] = Directory::GetFiles(d[i],textBox1->Text);				 int numFiles = f->get_Length();				 for (int j=0; j < numFiles; j++)				 {					 listBox1->Items->Add(f[j]);				 }				 DirSearch(d[i]);			 }		 }		 catch (System::Exception* e)		 {			 System::Console::WriteLine(e->Message);		 }	 }};}//Form1.cpp#include "stdafx.h"#include "Form1.h"#include <windows.h>using namespace RecursiveSearchCPP;int APIENTRY _tWinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPTSTR    lpCmdLine,                     int       nCmdShow){	System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;	Application::Run(new Form1());	return 0;}
مراجع
لمزيد من المعلومات حول كيفية إنشاء نماذج Windows في الملحقات التي تمت إدارتها لـ Visual C++ .NET 2002 راجع عينة "ManagedCWinFormWiz" في Visual Studio تعليمات .NET.

تحذير: تمت ترجمة هذا المقال تلقائياً

خصائص

رقم الموضوع: 307009 - آخر مراجعة: 08/28/2007 06:26:02 - المراجعة: 3.2

  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • kbmt kbhowtomaster kbio KB307009 KbMtar
تعليقات