Làm thế nào để làm cơ sở tệp I/O Visual C++ hoặc Visual C++ .NET

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để 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 nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các 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, 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.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 307398
Đối với một Microsoft Visual C++ .NET 2005/2008 ECMA C+ / CLI Phiên bản của bài viết này, hãy xem 950617.
Đối với phiên bản Microsoft Visual C# .NET của bài viết này, hãy xem 304430.
Đối với phiên bản Microsoft Visual Basic .NET của bài viết này, hãy xem 304427.
Bài viết này đề cập tới tên Microsoft Khuôn khổ .NET thư viện lớp sau:
  • System::ComponentModel
  • System::Windows::Forms
  • System::drawing
Tóm tắt
Bài viết từng bước này mô tả cách làm sáu cơ bản đầu vào/đầu ra (I/O) tệp trong Microsoft Visual C++ 2005 hoặc Microsoft Visual C++ .NET. Nếu bạn chưa quen với Khuôn khổ .NET, bạn sẽ thấy rằng mô hình đối tượng cho tệp trong Khuôn khổ .NET là tương tự như FileSystemObject (FSO) là phổ biến với nhiều nhà phát triển Microsoft Visual Studio 6.0. Để chuyển đổi dễ dàng hơn, chức năng được thể hiện trong bài viết này được dựa trên bài viết sau trong cơ sở kiến thức Microsoft:
186118 Làm thế nào để sử dụng FileSystemObject Visual Basic
Bạn vẫn có thể sử dụng FileSystemObject trong Khuôn khổ .NET. Vì FileSystemObject là một thành phần mô hình đối tượng thành phần (COM), Khuôn khổ .NET yêu cầu quyền truy cập vào các đối tượng thông qua các lớp tương hỗ. Khuôn khổ .NET bao bọc cho phần tạo ra cho bạn nếu bạn muốn sử dụng. Tuy nhiên, loại tệp , loại FileInfo , mục tin thư thoại, DirectoryInfo lớp và lớp liên quan khác trong Khuôn khổ .NET cung cấp chức năng không có sẵn với FSO, không có chi phí lớp tương hỗ.

Yêu cầu

Danh sách tóm tắt các khuyến nghị phần cứng, phần mềm, cơ sở hạ tầng mạng và gói bản ghi dịch vụ được yêu cầu:
  • Visual C++ 2005 hoặc Visual C++ .NET

Thể hiện vào/ra tệp

Ví dụ trong bài viết này mô tả cơ bản tệp I/O hoạt động. Phần "Từng bước ví dụ" mô tả cách tạo trình mẫu trình bày hoạt động sáu tệp I/O sau:
  • Đọc tệp văn bản
  • Viết một tệp văn bản
  • Xem Thông tin về Tệp
  • Danh sách đĩa
  • cặp danh sách
  • Danh sách tệp

Đọc tệp văn bản

Mã mẫu sau sử dụng lớp StreamReader đọc tệp văn bản. Nội dung của tệp được thêm vào một điều khiển ListBox . Khối thử... bắt được sử dụng để thông báo chương trình nếu tệp bị trống. Có nhiều cách để xác định khi đạt đến cuối tệp; mẫu này sử dụng phương pháp tóm tắt để kiểm tra các dòng sau trước khi đọc nó.
  listBox1->Items->Clear();   	try   	{    		String* textFile = String::Concat(windir,                                    (S"\\mytest.txt")); 	        StreamReader *reader=new  StreamReader(textFile);		do		{		    listBox1->Items->Add(reader->ReadLine());		}   		while(reader->Peek() != -1);	}               	catch (System::Exception *e)	{ 		listBox1->Items->Add(e);	}}				
Lưu ý: Visual C++ 2005, bạn phải thêm phổ biến ngôn ngữ thời gian hỗ trợ biên dịch tuỳ chọn (/clr:oldSyntax) đã tập hợp mẫu mã trước đó là quản lý C++. Thêm phổ biến hỗ trợ thời gian chạy ngôn ngữ biên soạn tuỳ chọn, hãy làm theo các bước sau:
  1. Nhấp vào dự án, và sau đó nhấp vàoProjectName Thuộc tính.

    Lưu ýProjectName là trình giữ chỗ cho tên của dự án.
  2. Bung rộng Cấu hình thuộc tính, và sau đó nhấp vào chung.
  3. Trong ngăn bên phải, bấm để chọn hỗ trợ thời gian chạy ngôn ngữ chung, cũ cú pháp (/ clr:oldSyntax) trong Thời gian chạy ngôn ngữ chung hỗ trợ dự án thiết lập.
  4. Bấm áp dụng, và sau đó bấm OK.
Để biết thêm thông tin về chung thời gian hỗ trợ biên dịch tùy chọn ngôn ngữ, ghé thăm Web site sau của Microsoft Developer Network (MSDN):

Viết một tệp văn bản

Mã mẫu này sử dụng lớp StreamWriter tạo và ghi vào tệp. Nếu bạn có tệp hiện có, bạn có thể mở trong cùng một cách.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");pwriter->WriteLine(S"File created using StreamWriter class.");pwriter->Close();listBox1->Items->Clear();String *filew = new String(S"File Written to C:\\KBTest.txt");listBox1->Items->Add(filew);				

Xem Thông tin về Tệp

Mã mẫu này sử dụng lớp FileInfo để truy cập vào một tập tin thuộc tính. Notepad.exe được sử dụng trong mẫu này. Thuộc tính xuất hiện trong điều khiển ListBox .
 listBox1->Items->Clear(); String* testfile = String::Concat(windir, (S"\\notepad.exe"));  FileInfo *pFileProps  =new FileInfo(testfile); listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) ); listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) ); listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) ); listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) ); listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );				

Danh sách đĩa

Mã mẫu này sử dụng các mục tin thư thoạiổ đĩa lớp vào danh sách các ổ đĩa logic trên hệ thống. Đối với các mẫu này, các kết quả xuất hiện trong điều khiển ListBox .
  listBox1->Items->Clear();  String* drives[] = Directory::GetLogicalDrives();  int numDrives = drives->get_Length();  for (int i=0; i<numDrives; i++)  {	listBox1->Items->Add(drives[i]);  } 				

cặp danh sách con

Mã mẫu này sử dụng phương pháp GetDirectories loại mục tin thư thoại để có cặp danh sách.
listBox1->Items->Clear();String* dirs[] = Directory::GetDirectories(windir);int numDirs = dirs->get_Length();for (int i=0; i<numDirs; i++){listBox1->Items->Add(dirs[i]);}				

Danh sách tệp

Mã mẫu này sử dụng phương pháp GetFiles của mục tin thư thoại tải một danh sách các tệp.
listBox1->Items->Clear();String* files[]= Directory::GetFiles(this->windir);int numFiles = files->get_Length();for (int i=0; i<numFiles; i++){  listBox1->Items->Add(files[i]);}				
Nhiều yếu tố có thể không đúng khi người dùng tăng truy cập vào tệp. Tệp không tồn tại, các tập tin có thể sử dụng hoặc người dùng không có quyền trên tệp mục tin thư thoại mà họ đang truy cập. Xem xét các khả năng khi bạn ghi mã để xử lý ngoại lệ có thể được tạo ra.

Ví dụ từng bước

  1. Bắt đầu Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 hoặc Microsoft Visual C++ 2005 Express Edition.
  2. Trên menu tệp , điểm đếnmới, và sau đó bấm dự án.
  3. Trong Dự án loại, bấmVisual C++ dự án. Mục tiêu bản , bấmỨng dụng Windows Forms (.NET).

    Lưu ý: Trong Visual Studio 2005, nhấp vàoVisual C++Loại dự án. Trong mẫu, bấm vàoỨng dụng Windows Forms.
  4. Loại KB307398 trong hộptên , nhập C:\ trong hộpđịa điểm , và sau đó bấmOK.
  5. Mở hình thức Form1 trong Designview và sau đó bấm F4 để mở cửa sổ thePropertries.
  6. Trong cửa sổ thuộc tính, mở rộng kích thướcmục tin thư thoại. Trong hộp rộng nhập 700. Trong hộp cao , nhập320.
  7. Thêm một ListBox kiểm soát và sáunút chọn một kiểm soát để Form1.

    Lưu ý: Để xem công cụ, bấm công cụ menu xem .
  8. Trong cửa sổ thuộc tính, thay đổi vịtrí, tên, kích thước,TabIndexthuộc tính văn bản của thesecontrols như sau:
    Kiểm soát IDVị tríTênKích thướcTabIndexVăn bản
    button1500, 32button1112,231Đọc tệp văn bản
    button2500, 64button2112,232Ghi tệp văn bản
    button3500, 96button3112,233Xem Thông tin về Tệp
    button4500, 128button4112,234Danh sách ổ đĩa
    button5500, 160button5112,235cặp danh sách con
    button6500, 192button6112,236Danh sách tệp
    listBox124, 24listBox1450,2000listBox1
  9. Mở tệp Form1.h. Trong khai báo lớp Form1 , tuyên bố một biến chuỗi riêng với mã sau đây:
    private:		String *windir;
  10. Lớp Form1 xây dựng thêm mã sau đây:
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. Để thực hiện thao tác kết quả vào tệp, thêm không gian tên System::IO.
  12. Nhấn SHIFT + F7 để mở Form1 inDesign xem. Bấm đúp vào Tệp văn bản đọc nút chọn một, sau đó dán mã sau:

    Lưu ý: Visual C++ 2005, nhấp vào thiết kế trong menu xem .
    // How to read a text file:// Use try...catch to deal with a 0 byte file or a non-existant file.listBox1->Items->Clear();try   {    	String* textFile = String::Concat(windir, (S"\\mytest.txt")); 	StreamReader *reader=new  StreamReader(textFile);	do	{	listBox1->Items->Add(reader->ReadLine());	}   	while(reader->Peek() != -1);}    catch(FileNotFoundException *ex){	listBox1->Items->Add(ex);}          catch (System::Exception *e){ 	listBox1->Items->Add(e);}
  13. Trong màn hình thiết kế Form1, bấm đúp vào Tệp văn bản ghi nút chọn một và sau đó dán mã sau:
    // This demonstrates how to create and to write to a text file.StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");pwriter->WriteLine(S"The file was created by using the StreamWriter class.");pwriter->Close();listBox1->Items->Clear();String *filew = new String(S"File written to C:\\KBTest.txt");listBox1->Items->Add(filew);
  14. Trong giao diện Form1 thiết kế, bấm đúp vào nút chọn một Xem thông tin về tệp , và sau đó dán mã sau trong phương pháp:
    // This code retrieves file properties. The example uses Notepad.exe.listBox1->Items->Clear();String* testfile = String::Concat(windir, (S"\\notepad.exe")); FileInfo *pFileProps  =new FileInfo(testfile);listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
  15. Trong màn hình Form1 thiết kế, bấm đúp vào nút chọn một Danh sách ổ đĩa và sau đó dán mã sau:
    // This demonstrates how to obtain a list of disk drives.listBox1->Items->Clear();String* drives[] = Directory::GetLogicalDrives();int numDrives = drives->get_Length();for (int i=0; i<numDrives; i++){	listBox1->Items->Add(drives[i]);}
  16. Trong giao diện Form1 thiết kế, bấm đúp vào nút chọn một cặp danh sách con , và sau đó dán mã sau:
    // This code obtains a list of folders. This example uses the Windows folder.listBox1->Items->Clear();String* dirs[] = Directory::GetDirectories(windir);int numDirs = dirs->get_Length();for (int i=0; i<numDirs; i++){	listBox1->Items->Add(dirs[i]);                                                    }
  17. Trong giao diện Form1 thiết kế, bấm đúp vào nút chọn một Danh sách tệp , và sau đó dán mã sau:
    // This code obtains a list of files. This example uses the Windows folder.listBox1->Items->Clear();String* files[]= Directory::GetFiles(this->windir);int numFiles = files->get_Length();for (int i=0; i<numFiles; i++){	listBox1->Items->Add(files[i]);}
  18. Xây dựng và sau đó chạy chương trình, nhấn CTRL + F5.

Hoàn thành mẫu mã

Lưu ý: Bạn phải thay đổi mã sau khi chạy Visual C++ 2005.
//Form1.h#pragma oncenamespace KB307398{	using namespace System;	using namespace System::IO;	using namespace System::ComponentModel;	using namespace System::Collections;	using namespace System::Windows::Forms;	using namespace System::Data;	using namespace System::Drawing;	/// <summary> 	/// Summary for Form1	///	/// WARNING: If you change the name of this class, you will need to change the 	///          'Resource File Name' property for the managed resource compiler tool 	///          associated with all .resx files this class depends on.  Otherwise,	///          the designers will not be able to interact properly with localized	///          resources associated with this form.	/// </summary>	public __gc class Form1 : public System::Windows::Forms::Form	{	private:		String *windir;	public:		Form1(void)		{			windir = System::Environment::GetEnvironmentVariable("windir");			InitializeComponent();		}  	protected:		void Dispose(Boolean disposing)		{			if (disposing && components)			{				components->Dispose();			}			__super::Dispose(disposing);		}	private: System::Windows::Forms::Button *  button1;	private: System::Windows::Forms::Button *  button2;	private: System::Windows::Forms::Button *  button3;	private: System::Windows::Forms::Button *  button4;	private: System::Windows::Forms::Button *  button5;	private: System::Windows::Forms::Button *  button6;	private: System::Windows::Forms::ListBox *  listBox1;	private:		/// <summary>		/// Required designer variable.		/// </summary>		System::ComponentModel::Container * components;		/// <summary>		/// Required method for Designer support - do not modify		/// the contents of this method with the code editor.		/// </summary>		void InitializeComponent(void)		{			this->button1 = new System::Windows::Forms::Button();			this->button2 = new System::Windows::Forms::Button();			this->button3 = new System::Windows::Forms::Button();			this->button4 = new System::Windows::Forms::Button();			this->button5 = new System::Windows::Forms::Button();			this->button6 = new System::Windows::Forms::Button();			this->listBox1 = new System::Windows::Forms::ListBox();			this->SuspendLayout();			// 			// button1			// 			this->button1->Location = System::Drawing::Point(500, 32);			this->button1->Name = S"button1";			this->button1->Size = System::Drawing::Size(112, 23);			this->button1->TabIndex = 1;			this->button1->Text = S"Read Text File";			this->button1->Click += new System::EventHandler(this, button1_Click);			// 			// button2			// 			this->button2->Location = System::Drawing::Point(500, 64);			this->button2->Name = S"button2";			this->button2->Size = System::Drawing::Size(112, 23);			this->button2->TabIndex = 2;			this->button2->Text = S"Write Text File";			this->button2->Click += new System::EventHandler(this, button2_Click);			// 			// button3			// 			this->button3->Location = System::Drawing::Point(500, 96);			this->button3->Name = S"button3";			this->button3->Size = System::Drawing::Size(112, 23);			this->button3->TabIndex = 3;			this->button3->Text = S"View File Information";			this->button3->Click += new System::EventHandler(this, button3_Click);			// 			// button4			// 			this->button4->Location = System::Drawing::Point(500, 128);			this->button4->Name = S"button4";			this->button4->Size = System::Drawing::Size(112, 23);			this->button4->TabIndex = 4;			this->button4->Text = S"List Drives";			this->button4->Click += new System::EventHandler(this, button4_Click);			// 			// button5			// 			this->button5->Location = System::Drawing::Point(500, 160);			this->button5->Name = S"button5";			this->button5->Size = System::Drawing::Size(112, 23);			this->button5->TabIndex = 5;			this->button5->Text = S"List Subfolders";			this->button5->Click += new System::EventHandler(this, button5_Click);			// 			// button6			// 			this->button6->Location = System::Drawing::Point(500, 188);			this->button6->Name = S"button6";			this->button6->Size = System::Drawing::Size(112, 23);			this->button6->TabIndex = 6;			this->button6->Text = S"List Files";			this->button6->Click += new System::EventHandler(this, button6_Click);			// 			// listBox1			// 			this->listBox1->Location = System::Drawing::Point(24, 24);			this->listBox1->Name = S"listBox1";			this->listBox1->Size = System::Drawing::Size(450, 199);			this->listBox1->TabIndex = 0;			// 			// Form1			// 			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);			this->ClientSize = System::Drawing::Size(692, 293);			this->Controls->Add(this->listBox1);			this->Controls->Add(this->button6);			this->Controls->Add(this->button5);			this->Controls->Add(this->button4);			this->Controls->Add(this->button3);			this->Controls->Add(this->button2);			this->Controls->Add(this->button1);			this->Name = S"Form1";			this->Text = S"Form1";			this->ResumeLayout(false);		}		private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)			 {// This code shows how to read a text file.// The try...catch code is to deal with a 0 byte file or a non-existant file.listBox1->Items->Clear();				try   				{    					String* textFile = String::Concat(windir, (S"\\mytest.txt")); 					StreamReader *reader=new  StreamReader(textFile);					do					{					listBox1->Items->Add(reader->ReadLine());					}   					while(reader->Peek() != -1);				} 				catch(FileNotFoundException *ex)				{					listBox1->Items->Add(ex);				}	     				        				catch (System::Exception *e)				{ 					listBox1->Items->Add(e);				}			 }private: System::Void button2_Click(System::Object *  sender, System::EventArgs *  e)		 {// This code demonstrates how to create and to write to a text file.StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");pwriter->WriteLine(S"The file was created by using the StreamWriter class.");pwriter->Close();listBox1->Items->Clear();String *filew = new String(S"The file was written to C:\\KBTest.txt");listBox1->Items->Add(filew);		 }private: System::Void button3_Click(System::Object *  sender, System::EventArgs *  e)		 {// This code retrieves file properties. This example uses Notepad.exe.listBox1->Items->Clear();String* testfile = String::Concat(windir, (S"\\notepad.exe")); FileInfo *pFileProps  =new FileInfo(testfile);listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );		 }private: System::Void button4_Click(System::Object *  sender, System::EventArgs *  e)		 {// The code demonstrates how to obtain a list of disk drives.listBox1->Items->Clear();String* drives[] = Directory::GetLogicalDrives();int numDrives = drives->get_Length();for (int i=0; i<numDrives; i++){	listBox1->Items->Add(drives[i]);}		 }private: System::Void button5_Click(System::Object *  sender, System::EventArgs *  e)		 {// This code obtains a list of folders. This example uses the Windows folder.listBox1->Items->Clear();String* dirs[] = Directory::GetDirectories(windir);int numDirs = dirs->get_Length();for (int i=0; i<numDirs; i++){	listBox1->Items->Add(dirs[i]);                                                    }		 }private: System::Void button6_Click(System::Object *  sender, System::EventArgs *  e)		 {// This code obtains a list of files. This example uses the Windows folder.listBox1->Items->Clear();String* files[]= Directory::GetFiles(this->windir);int numFiles = files->get_Length();for (int i=0; i<numFiles; i++){	listBox1->Items->Add(files[i]);}		 }};}//Form1.cpp#include "stdafx.h"#include "Form1.h"#include <windows.h>using namespace KB307398;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
Để biết thêm thông tin, ghé thăm web site sau của Microsoft: Để biết thêm thông tin về cách tạo Windows forms trong quản lý phần mở rộng của C++, xem mẫu "ManagedCWinFormWiz" trong Visual Studio .NET giúp.

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 307398 - Xem lại Lần cuối: 05/07/2016 23:09:00 - Bản sửa đổi: 4.0

Microsoft Visual C++ 2008 Express Edition, Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition

  • kbwindowsforms kbforms kbio kbfileio kbhowtomaster kbnewsgrouplink kbmt KB307398 KbMtvi
Phản hồi