現在オフラインです。再接続するためにインターネットの接続を待っています

Visual C を使用して、再帰的に検索フォルダーをする方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:307009
マイクロソフトの Visual Basic では。このバージョン記事は、 306666.
Microsoft の C#。NETバージョンこの資料の「を参照してください。 303974.

この資料を参照します。次の Microsoft にします。NET Framework クラス ライブラリの名前空間。
  • System.IO
  • System.ComponentModel
  • System.Windows.Forms
  • System.Drawing

このタスクで

概要
この資料で説明を再帰的にする方法サブフォルダーのルート フォルダーには、コードを使用して、開始するファイルを検索します。このタスクは、ディレクトリの再帰呼び出しとして知られています。検索を指定することができます。特定の条件に一致するファイルを検索できるようにする文字列を指定します。各この資料のコードの一部を説明し、作業用サンプルのコードです。また提供されます。

ディレクトリの再帰呼び出しは、開発者向けの一般的な I/O タスク。は、 ファイル システム オブジェクト オブジェクトがコンポーネント オブジェクト モデル (COM) はこのタスクを容易します。このタスクがプログラムを Visual C では簡単です。NET 2002。同様に、 ファイル システム オブジェクト オブジェクト、クラス、 System.IO 名前空間は、オブジェクト指向のファイルにアクセスを提供し、フォルダー表示されます。

要件

推奨されるハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および必要な service pack を以下に示します。
  • Microsoft Visual の C++。NET または Microsoft Visual C 2005

ディレクトリの再帰呼び出しを有効にします。

ファイルおよびディレクトリ操作クラスに存在している、 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 .dll ファイルを C:\ フォルダー内のすべてのファイルを取得する方法拡張子:
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. 下にあります。 [プロジェクトの種類をクリックしてVisual C.NET.

    メモ Microsoft Visual C 2005 では、 Visual C.NET 変更するのには Visual C.
  4. 下にあります。 テンプレートをクリックしてWindows フォーム アプリケーション (。NET).
  5. で、 名前 ボックスの種類RecursiveSearchCPP.で、 検索ボックスの種類 正しくありません:C:\、し[OK].
  6. 開いている、 Form1 フォームのデザインで表示、および、開くには F4 キーを押して、プロパティ ウィンドウです。
  7. [プロパティ] ウィンドウでを展開し、 サイズ フォルダーです。で、 フィールドの種類700.で、 高さ フィールドの種類320.
  8. 2 つを追加します。 ラベル コントロール、1 テキスト ボックス [1 つの管理コンボ ボックス [1 つの管理 リスト ボックス コントロールは、1 つ ボタン Form1 フォームに制御します。
  9. プロパティ ウィンドウで、変更する、場所、、 サイズ、、 Tabindex プロパティ、、は、 テキスト プロパティには、次のように:
    コントロールID場所サイズTabindex プロパティテキスト
    label18, 16144、165含むファイルを検索してください。
    textBox18, 40120204*.dll
    label28, 96120253[ファイルの場所します。
    button1608、248[75]、250& 検索
    listBox1152、8530、2251
    comboBox18, 128120252C:\\
  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 - 最終更新日: 07/24/2011 21:18:00 - リビジョン: 5.0

  • kbhowtomaster kbio kbmt KB307009 KbMtja
フィードバック