Bagaimana melakukan I/O file dasar dalam Visual C++ atau Visual C++ .NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 307398 - Melihat produk di mana artikel ini berlaku.
Untuk Microsoft Visual C++ .NET 2005/2008 ECMA c / CLI versi dari artikel ini, lihat 950617.
Untuk versi Microsoft Visual C# .NET ini Pasal, lihat 304430.
Untuk Microsoft Visual Dasar .NET versi dari artikel ini, lihat 304427.
Artikel ini merujuk kepada Ruang nama Microsoft .NET Framework kelas Perpustakaan berikut:
  • System::ComponentModel
  • System::Windows::Forms
  • System::drawing
Perbesar semua | Perkecil semua

Pada Halaman ini

Ringkasan

Artikel selangkah demi selangkah ini menjelaskan bagaimana melakukan dasar enam file input/output (i/o) operasi dalam Microsoft Visual C++ 2005 atau Microsoft Visual C++ .NET. Jika Anda baru untuk .NET Framework, Anda akan menemukan bahwa object model untuk operasi file di .NET Framework ini mirip FileSystemObject (FSO) yang populer dengan banyak pengembang Microsoft Visual Studio 6.0. Untuk membuat transisi yang lebih mudah, fungsi yang ditunjukkan dalam hal ini Artikel ini didasarkan pada artikel Pangkalan Pengetahuan Microsoft berikut:
186118 Cara menggunakan FileSystemObject dengan Visual Basic
Anda masih dapat menggunakan FileSystemObject di .NET Framework. Karena FileSystemObject merupakan komponen komponen objek Model (COM), .NET Framework mengharuskan akses ke objek dilakukan melalui lapisan Interop. .NET Framework menghasilkan sebuah bungkus untuk komponen untuk Anda jika Anda ingin menggunakannya. Namun, File kelas, kelas FileInfo , direktori, DirectoryInfo kelas, dan kelas-kelas lain terkait di .NET Framework, menawarkan fungsi yang tidak tersedia dengan FSO, tanpa overhead Interop lapisan.

Persyaratan

Daftar berikut menguraikan fitur peranti penangkap keras, peranti penangkap lunak, infrastruktur jaringan, dan Service Pack yang diperlukan:
  • Visual C++ 2005 atau Visual C++ .NET

Operasi menunjukkan File i/o

Sebagai contoh dalam artikel ini menggambarkan operasi I/O file dasar. Bagian "Step-by-Step contoh" menjelaskan cara membuat program sampel yang menunjukkan enam file i/o berikut:
  • Membaca File teks
  • Menulis File teks
  • Lihat informasi File
  • Daftar kandar cakram
  • folder daftar
  • Daftar file

Membaca File teks

Kode contoh berikut menggunakan sebuah StreamReader kelas untuk membaca file teks. Isi file ditambahkan ke sebuah ListBox DNS. Mencoba try... catch blok yang digunakan untuk memberitahukan program jika file kosong. Ada banyak cara untuk menentukan ketika mencapai bagian akhir file; sampel ini menggunakan metode mengintip untuk memeriksa baris berikutnya sebelum membaca.
  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);
	}

}
				
Catatan Pada Visual C++ 2005, Anda harus menambahkan bahasa runtime dukungan kompiler pilihan umum (/clr:oldSyntax) untuk berhasil mengumpulkan sampel kode sebelumnya sebagai berhasil C++. Untuk menambahkan bahasa runtime dukungan kompiler pilihan umum, ikuti langkah berikut:
  1. Klik Proyek, lalu klikProjectName Properti.

    CatatanProjectName adalah pengganti untuk nama proyek.
  2. Memperluas Konfigurasi properti, lalu klikUmum.
  3. Di panel kanan-atas, klik untuk memilih Common Language Runtime dukungan, tua sintaks (/ clr:oldSyntax) dalamCommon Language Runtime dukungan Seting Proyek.
  4. KlikMenerapkan, lalu klik Oke.
Untuk informasi lebih lanjut tentang opsi kompiler common language runtime dukungan, kunjungi situs web Microsoft Developer Network (MSDN) berikut:
http://msdn2.Microsoft.com/en-US/Library/k8d11d4s.aspx

Menulis File teks

Ini contoh kode menggunakan kelas StreamWriter untuk membuat dan menulis ke file. Jika Anda memiliki yang ada file, Anda dapat membukanya dengan cara yang sama.
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);
				

Lihat informasi File

Ini contoh kode menggunakan FileInfo kelas untuk mengakses properti file. Notepad.exe digunakan dalam hal ini contoh. Sifat yang muncul dalam sebuah ListBox DNS.
 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()) );
				

Daftar kandar cakram

Ini contoh kode menggunakan kelas direktori dan Drive untuk daftar logis drive pada sistem. Untuk contoh ini, hasil muncul dalam sebuah ListBox DNS.
  listBox1->Items->Clear();
  String* drives[] = Directory::GetLogicalDrives();
  int numDrives = drives->get_Length();
  for (int i=0; i<numDrives; i++)
  {
	listBox1->Items->Add(drives[i]);
  } 
				

Daftar subfolder

Kode contoh ini menggunakan metode GetDirectories kelas direktori untuk mendapatkan folder daftar.
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]);
}
				

Daftar file

Kode contoh ini menggunakan metode GetFiles kelas direktori untuk mendapatkan daftar file.
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]);
}
				
Banyak hal yang bisa salah ketika user memperoleh akses ke file. File tidak ada, file dapat digunakan, atau pengguna mungkin tidak memiliki hak file dari folder yang mereka mencoba untuk mengakses. Mempertimbangkan kemungkinan ini ketika Anda menulis kode untuk menangani pengecualian yang mungkin dihasilkan.

Contoh langkah demi langkah

  1. Mulai Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 atau Microsoft Visual C++ 2005 Express Edition.
  2. Pada File Menu, titik untukBaru, lalu klik Proyek.
  3. Di bawah Jenis proyek, klikProyek-proyek Visual C++. Di bawah Template KlikAplikasi bentuk Windows (.NET).

    Catatan Dalam Visual Studio 2005, klikVisual C++ di bawah Jenis proyek. Di bawah Template, klikAplikasi bentuk Windows.
  4. Jenis KB307398 dalamNama kotak, jenis C:\ dalamLokasi kotak, dan kemudian klikOke.
  5. bentuk terbuka Form1 dalam desain Lihat, dan kemudian tekan F4 untuk membuka Propertries jendela.
  6. Pada jendela Properties, memperluas Ukuranfolder. Dalam Lebar kotak, jenis 700. Dalam Tinggi kotak, jenis320.
  7. Menambahkan satu ListBox kontrol dan enamtombol tekan kontrol untuk Form1.

    Catatan Untuk melihat toolbox, klik Toolbox pada Pemandangan menu.
  8. Pada jendela Properties, mengubahLokasi, the Nama, the Ukuran, theTabIndex, dan Teks properti ini kontrol sebagai berikut:
    Perkecil tabel iniPerbesar tabel ini
    Kontrol IDLokasiNamaUkuranTabIndexTeks
    button1500, 32button1112, 231Baca File teks
    tombol2500, 64tombol2112, 232Menulis File teks
    button3500, 96button3112, 233Lihat informasi File
    button4500, 128button4112, 234Daftar drive
    button5500, 160button5112, 235Daftar subfolder
    button6500, 192button6112, 236Daftar file
    listBox124, 24listBox1450, 2000listBox1
  9. Buka Form1.h file. Dalam deklarasi kelas Form1 , menyatakan satu pribadi String variabel dengan kode berikut:
    private:
    		String *windir;
  10. Dalam konstruktor kelas Form1 Tambahkan kode berikut:
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. Untuk melakukan operasi file Input output, tambahkan System::IO namespace.
  12. Tekan SHIFT + F7 untuk membuka Form1 di Tampilan Desain. Double-klik tombol tekan Membaca File teks , dan kemudian paste kode berikut:

    Catatan Dalam Visual C++ 2005, klik Desain dalam Pemandangan menu.
    // 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. Dalam tampilan Form1 Design, klik ganda tombol tekan Menulis File teks , dan kemudian paste kode berikut:
    // 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. Dalam tampilan Form1 Design, klik ganda tombol tekan Lihat informasi File , dan kemudian paste kode berikut dalam metode:
    // 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. Dalam tampilan Form1 Design, klik ganda tombol tekan Daftar drive , dan kemudian paste kode berikut:
    // 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. Dalam tampilan Form1 Design, klik ganda tombol tekan Daftar subfolder , dan kemudian paste kode berikut:
    // 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. Dalam tampilan Form1 Design, klik ganda tombol tekan Daftar file , dan kemudian paste kode berikut:
    // 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. Untuk membangun dan kemudian jalankan program, tekan CTRL + F5.

Contoh kode lengkap

Catatan Anda harus mengubah kode berikut ketika berjalan di Visual C++ 2005.
//Form1.h
#pragma once


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

Referensi

Untuk informasi lebih lanjut, kunjungi situs web Microsoft berikut:
http://support.Microsoft.com/default.aspx?xmlid=FH;EN-US; vcnet
Untuk selengkapnya tentang cara membuat bentuk Windows di Managed Ekstensi untuk c + +, lihat contoh "ManagedCWinFormWiz" dalam Visual Studio .NET Tolong.

Properti

ID Artikel: 307398 - Kajian Terakhir: 28 Juni 2013 - Revisi: 3.0
Berlaku bagi:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Kata kunci: 
kbwindowsforms kbforms kbio kbfileio kbhowtomaster kbnewsgrouplink kbmt KB307398 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.
Klik disini untuk melihat versi Inggris dari artikel ini: 307398

Berikan Masukan

 

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