Làm th? nào đ? đ? quy t?m ki?m thư m?c b?ng cách s? d?ng Visual C++

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 307009 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài t?ng bư?c này mô t? cách đ? quy t?m ki?m thư m?c con cho tác ph?m, b?t đ?u v?i m?t thư m?c g?c, b?ng cách s? d?ng m?. Tác v? này đư?c g?i là thư m?c đ? quy. B?n có th? ch? đ?nh m?t t?m ki?m / / String đ? các b?n có th? t?m ki?m cho các t?p tin phù h?p v?i m?t tiêu chí nh?t đ?nh. M?i m?t ph?n c?a m? trong bài vi?t này đư?c gi?i thích, và m?t m?u m? làm vi?c là c?ng cung c?p.

Thư m?c đ? quy là m?t ph? bi?n I/O nhi?m v? cho các nhà phát tri?n. Các FileSystemObject làm đ?i tư?ng cho nhi?m v? này d? dàng cho mô h?nh đ?i tư?ng thành ph?n (COM) các chương tr?nh, nhưng công vi?c này d? dàng hơn trong Visual C++.NET 2002. Tương t? như các FileSystemObject đ?i tư?ng, các l?p h?c trong các System.io không gian tên cung c?p m?t hư?ng đ?i tư?ng cách đ? truy c?p t?p tin và thư m?c.

Yêu c?u

Danh sách sau v?ch ra đư?c đ? ngh? ph?n c?ng, ph?n m?m, cơ s? h? t?ng m?ng và gói d?ch v? mà b?n c?n:
  • Microsoft Visual C++.NET ho?c Microsoft Visual C++ 2005

Kích ho?t tính năng thư m?c đ? quy

Các t?p tin và thư m?c thao tác các l?p h?c n?m trong các System::Io không gian tên. Trư?c khi b?n làm vi?c v?i các l?p h?c, thêm dư?i đây M? s?:
using <mscorlib.dll>
using namespace System;
using namespace System::IO;
Các System::Io không gian tên cung c?p nhi?u tùy ch?n đ? làm vi?c v?i t?p và v?i các thư m?c. Các System::Io không gian tên không ch? cung c?p các l?p h?c mà b?n có th? t?o ra m?t Ví d?, nhưng nó c?ng cung c?p các l?p h?c h?u ích t?p tin và thư m?c. Đây các l?p h?c có phương pháp t?nh mà b?n có th? g?i mà không c?n tuyên b? m?t bi?n ki?u đó. Ví d?, b?n có th? s? d?ng các Thư mục l?p h?c đ? có đư?c các c?p con c?a c?p.

Các sau m? s? d?ng t?nh GetDirectories phương pháp c?a các Thư mục l?p h?c đ? tr? l?i m?t m?ng c?a chu?i. M?ng này ch?a thư m?c đư?ng d?n đ?n thư m?c con trong thư m?c c: \, n?u có t?n t?i:
String* directories[] = Directory::GetDirectories("C:\\");
				
Các Thư mục l?p c?ng ch?a các GetFiles phương pháp. B?n có th? s? d?ng GetFiles đ? l?y m?t chu?i m?ng c?a t?p tin mà phù h?p v?i m?t tiêu chí nh?t đ?nh. Sau m? m?u s? d?ng các GetFiles phương pháp đ? l?y t?t c? các file trong thư m?c c: \ v?i m?t t?p tin .dll ph?n m? r?ng tên:
String* files[] = Directory::GetFiles("C:\\", "*.dll");
				
B?n có th? s? d?ng các GetDirectories phương pháp và các GetFiles phương pháp c?a các Thư mục l?p h?c đ? đ? quy t?m ki?m các t?p tin mà phù h?p v?i chu?i t?m ki?m. S? d?ng phương pháp sau đ? th?c hi?n đ? quy:
	 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);
		 }
	 }
M? trư?c đó vư?t qua m?t chu?i đ? các DirSearch ch?c năng. Giá tr? chu?i này là đư?ng d?n đ?y đ? c?a thư m?c mà b?n mu?n t?m ki?m. B?n có th? s? d?ng cácGetDirectories phương pháp đ? l?y các c?p con c?a c?p đư?c thông qua vào th? t?c c?a b?n. B?i v? các GetDirectories phương pháp tr? v? m?t m?ng, b?n có th? s? d?ng m?t cho tuyên b? đ? iterate trong m?i thư m?c con. Đ?i v?i m?i thư m?c con, s? d?ng các GetFiles phương pháp đ? iterate qua các t?p tin trong thư m?c đó. Giá tr? c?a các h?p văn b?n vào h?nh th?c c?a b?n thông qua v?i các GetFiles phương pháp. H?p văn b?n ch?a chu?i t?m ki?m các b? l?c các k?t qu? trên mà các GetFiles phương pháp tr? v?. Khi các t?p tin phù h?p v?i tiêu chí t?m ki?m, nó là thêm vào h?p danh sách c?a b?n. Đ?i v?i m?i c?p con có v? trí, g?i cho các DirSearch ch?c năng m?t l?n n?a, và sau đó vư?t qua m?t thư m?c con. B?n có th? s? d?ng này đ? quy g?i đ?n t?m ki?m t?t c? các c?p con c?a c?p g?c mà b?n ch? đ?nh.

T?o m?u

  1. B?t đ?u Microsoft Visual Studio.NET 2003 ho?c Microsoft Visual Studio 2005.
  2. Trên các Tệp tr?nh đơn, đi?m đ?nM?i, sau đó b?m Dự án.
  3. Dư?i Các lo?i d? án, b?mVisual c + +.NET.

    Chú ý Trong Microsoft Visual C++ 2005, Visual c + +.NET là đ? thay đ?i Visual c ++.
  4. Dư?i Khuôn mẫu, b?m?ng d?ng Windows Forms (.NET).
  5. Trong các Tên h?p, lo?iRecursiveSearchCPP. Trong các Xác đ?nh v? tríh?p, lo?i C: \, sau đó b?mOk.
  6. M? các Form1 h?nh th?c trong thi?t k? xem và sau đó nh?n F4 đ? m? các C?a s? Properties.
  7. Trong c?a s? thu?c tính, m? r?ng các Kích thước thư m?c. Trong các Chi?u r?ng l?nh v?c này, lo?i700. Trong các Chi?u cao l?nh v?c này, lo?i320.
  8. Thêm hai Nh?n hi?u đi?u khi?n, m?t TextBox ki?m soát, m?tComboBox ki?m soát, m?t ListBox ki?m soát, và m?t Nút đi?u khi?n đ? t?o thành Form1.
  9. Trong c?a s? thu?c tính, thay đ?i cácV? trí, các Kích thước, các TabIndex, và các Văn b?n thu?c tính như sau:
    Thu g?n b?ng nàyBung r?ng b?ng này
    Ki?m soát IDV? tríKích thướcTabIndexVăn b?n
    Label18, 16144, 165T?m ki?m cho các t?p tin có ch?a:
    textBox18, 40120, 204*.dll
    label28, 96120, 253T?m trong:
    button1608, 24875, 250& Search
    listBox1152, 8530, 2251
    comboBox18, 128120, 252C:\\
  10. Trong các InitializeComponent phương pháp cho h?p combo, thêm các m? sau đây đ? tranh th? t?t c? các ? đ?a m?ng có s?n trên máy tính:
    // 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. B?m đúp chu?t vào các Tìm kiếm nút, và sau đó dán m? sau trong phương pháp:
    // 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. Đ? xây d?ng các ?ng d?ng, nh?n CTRL + F5 đ? xây d?ng.
  13. Ch?y các ?ng d?ng.

Hoàn thành m?u m?

// Form1.h
#pragma once

namespace 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;
}

THAM KH?O

Cho bi?t thêm thông tin v? làm th? nào đ? t?o Windows Forms trong qu?n l? ph?n m? r?ng c?a Visual C++.NET 2002, xem m?u "ManagedCWinFormWiz" trong Visual Studio.Tr? giúp NET.

Thu?c tính

ID c?a bài: 307009 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
T? khóa: 
kbhowtomaster kbio kbmt KB307009 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:307009

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com