현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

Visual C++를 사용하여 검색 폴더 재귀적으로 방법

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

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 네임스페이스의 클래스는 파일과 폴더에 액세스할 수 있는 개체 지향 방법을 제공합니다.

요구 사항

다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩의 목록입니다.
  • 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 문자열 배열을 특정 조건에 일치하는 파일 검색할 수 있습니다. 다음 코드 샘플은 .dll 파일 이름 확장명이 C:\ 폴더의 모든 파일을 검색하려면 GetFiles 메서드를 사용하는:
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 메서드는 배열을 반환하는 때문에 for 문의 각 하위 폴더를 통해 반복할 수 있습니다. 각 하위 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++ .NETVisual C++ 로 변경됩니다.
  4. 템플릿Windows Forms 응용 프로그램 (.NET)를 클릭하십시오.
  5. 이름 상자에 RecursiveSearchCPP을 입력하십시오. 찾기 상자에 C:\ 를 입력한 다음 확인 을 누릅니다.
  6. 디자인 Form1 폼을 열어 보고, 다음 속성 창을 열려면 F4 키를 누릅니다.
  7. 속성 창에서 크기 폴더를 확장하십시오. 700너비 필드에 입력하십시오. 320높이 필드에 입력하십시오.
  8. 두 개의 레이블 컨트롤이, 한 TextBox 컨트롤, 한 ComboBox 컨트롤, 한 ListBox 컨트롤 및 한 Button 컨트롤을 Form1 폼에 추가하십시오.
  9. 속성 창에서 위치, 크기, TabIndexText 속성을 다음과 같이 변경하십시오.
    컨트롤 ID위치크기TabIndex텍스트
    레이블18, 16144, 165포함할 파일 검색:
    textBox18, 40120, 204*.dll
    레이블28, 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 Forms 관리되는 확장에 대한 Visual C++ .NET 2002 만드는 방법에 대한 자세한 내용은 Visual Studio .NET 도움말의 "ManagedCWinFormWiz" 샘플을 참조하십시오.

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 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 KbMtko
피드백