Cara melakukan I/O berkas dasar di Visual C++ atau Visual C++ .NET

Untuk Microsoft Visual C++ .NET 2005 2008 ECMA c / CLI versi dari artikel ini, lihat 950617 .

Untuk versi Microsoft Visual C# .NET artikel ini, baca
304430 .
Untuk versi Microsoft Visual Basic .NET dari artikel ini, lihat
304427 .
Artikel ini merujuk ke ruang nama perpustakaan kelas Microsoft .NET Framework berikut ini:
  • System::ComponentModel
  • System::Windows::Forms
  • System::Drawing

Ringkasan

Artikel ini selangkah demi selangkah menjelaskan cara melakukan enam basic input/output (I/O) operasi file di Microsoft Visual C++ 2005 atau Microsoft Visual C++ .NET. Jika Anda baru untuk .NET Framework, Anda akan menemukan bahwa model objek untuk operasi file di .NET Framework sama dengan FileSystemObject (FSO) yang populer dengan banyak pengembang Microsoft Visual Studio 6.0. Untuk membuat transisi lebih mudah, fungsionalitas yang ditunjukkan dalam artikel ini berdasarkan artikel Pangkalan Pengetahuan Microsoft berikut ini:
186118 cara menggunakan FileSystemObject dengan Visual Basic

Anda masih dapat menggunakan FileSystemObject di .NET Framework. Karena FileSystemObject komponen Model objek komponen (COM), .NET Framework memerlukan akses ke objek dapat melalui lapisan Interop. .NET Framework menghasilkan pembungkus untuk komponen untuk Anda apabila Anda ingin menggunakannya. Namun, File kelas, kelas FileInfo , direktori, DirectoryInfo kelas, dan kelas lain terkait di .NET Framework, menawarkan fungsionalitas yang tidak tersedia dengan FSO, tanpa beban lapisan Interop.

Persyaratan

Daftar berikut ini mencantumkan perangkat keras yang disarankan, perangkat lunak, jaringan infrastruktur, dan paket layanan yang diperlukan:
  • Visual C++ 2005 atau Visual C++ .NET

Operasi I/O berkas menunjukkan

Contoh dalam artikel ini menjelaskan pengoperasian I/O berkas dasar. Bagian "Selangkah demi selangkah contoh" menjelaskan cara membuat contoh program yang menunjukkan operasi enam I/O berkas berikut ini:
  • Membaca berkas teks
  • Menulis berkas teks
  • Lihat informasi berkas
  • Daftar Disk Drive
  • Daftar folder
  • Daftar File

Membaca berkas teks

Kode contoh berikut menggunakan kelas StreamReader untuk membaca berkas teks. Konten berkas ditambahkan ke ListBox control. Coba... catch blok digunakan untuk memberitahu program jika file yang kosong. Ada banyak cara untuk menentukan saat mencapai akhir file; sampel ini menggunakan metode cuplikan 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 Visual C++ 2005 Anda harus menambahkan umum bahasa runtime compiler opsi dukungan (/clr:oldSyntax) berhasil menyusun sampel kode sebelumnya sebagai C++ dikelola. Untuk menambahkan umum bahasa runtime compiler opsi dukungan, ikuti langkah-langkah berikut:

  1. Klik proyek, dan kemudian klik

    ProjectName properti.



    Catatan ProjectName adalah placeholder untuk nama proyek.
  2. Luaskan Konfigurasi properti, dan kemudian klik

    Umum.

  3. Di panel kanan, klik untuk memilih dukungan waktu jalan bahasa umum, lama sintaks (/ clr:oldSyntax) di

    Waktu jalan bahasa umum mendukung proyek pengaturan.
  4. Klik

    Terapkan, dan kemudian klik OK.

Untuk informasi selengkapnya tentang opsi compiler umum bahasa runtime dukungan, kunjungi situs Web Microsoft Developer Network (MSDN) berikut:

Menulis berkas teks

Kode sampel ini menggunakan kelas StreamWriter untuk membuat dan menulis ke berkas. Apabila Anda memiliki berkas yang ada, Anda dapat membuka 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);

Informasi berkas tampilan

Kode sampel ini menggunakan kelas FileInfo untuk mengakses properti berkas. Notepad.exe digunakan dalam contoh ini. Properti ditampilkan di 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 Disk Drive

Kode sampel ini menggunakan direktori dan pengandar kelas untuk daftar Logis pada sistem. Untuk contoh ini, hasil yang ditampilkan di 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 sampel ini menggunakan metode GetDirectories kelas direktori untuk mendapatkan daftar 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]);
}

Daftar File

Kode sampel 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 bisa salah ketika pengguna memperoleh akses ke berkas. Berkas mungkin tidak ada, berkas dapat digunakan, atau pengguna mungkin tidak memiliki hak pada berkas map yang mereka mencoba untuk mengakses. Pertimbangkan kemungkinan ini ketika Anda menulis kode untuk menangani pengecualian yang dapat dibuat.

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, arahkan ke
    Baru, dan kemudian klik Project.
  3. Klik pada Jenis proyek,
    Visual C++ proyek. Pada bagian pola dasar , klik
    Aplikasi Windows Forms (.NET).

    Catatan Dalam Visual Studio 2005 klik
    Visual C++ pada jenis proyek. Pola dasar, klik
    Aplikasi Windows Forms.
  4. Ketik KB307398 di
    Nama , ketik C:\ di
    Lokasi kotak, dan kemudian klik
    OK.
  5. Membuka borang Form1 di tampilan desain, dan kemudian tekan F4 untuk membuka jendela Properti.
  6. Di jendela properti, rentangkan map ukuran. Di kotak lebar , ketik 700. Di kotak Height ketik
    320.
  7. Tambahkan satu ListBox kontrol dan enam
    Tombol kontrol untuk Form1.

    Catatan Untuk melihat toolbox, klik Toolbox menu tampilan .
  8. Di jendela properti, mengubah
    Lokasi, nama, ukuran,
    TabIndex, dan properti teks kontrol ini sebagai berikut:
    ID kontrolLokasiNamaUkuranTabIndexTeks
    button1500, 32button1112, 231Baca File teks
    button2500, 64button2112, 232Menulis berkas teks
    button3500, 96button3112, 233Informasi berkas tampilan
    button4500, 128button4112, 234Daftar drive
    button5500, 160button5112, 235Daftar subfolder
    button6500, 192button6112, 236Daftar File
    listBox124, 24listBox1450, 2000listBox1
  9. Buka berkas Form1.h. Dalam deklarasi kelas Form1 , menyatakan variabel String pribadi satu dengan kode berikut:
    private:String *windir;
  10. Dalam konstruktor kelas Form1 menambahkan kode berikut ini:
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. Untuk melakukan operasi file Input output, tambahkan System::IOnamespace.
  12. Tekan SHIFT + F7 untuk membuka Form1 di tampilan desain. Klik dua kali File teks baca tombol, dan kemudian tempel kode berikut ini:

    Catatan Visual C++ 2005 klik desain di menu tampilan .
    // 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 desain Form1, klik dua kali tombol Menulis berkas teks , dan kemudian tempel kode berikut ini:
    // 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 desain Form1, klik dua kali tombol Tampilan informasi File , dan kemudian tempel 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 desain Form1, klik dua kali tombol Daftar kandar , dan kemudian tempelkan kode berikut ini:
    // 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 desain Form1, klik dua kali tombol Daftar subfolder , dan kemudian tempel kode berikut ini:
    // 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 desain Form1, klik dua kali tombol Daftar file , dan kemudian tempel kode berikut ini:
    // 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 kemudian menjalankan program, tekan CTRL + F5.

Contoh kode lengkap

Catatan Anda harus mengubah kode berikut saat menjalankan 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 selengkapnya, kunjungi situs Web Microsoft berikut ini:Untuk informasi selengkapnya tentang cara membuat Windows forms dalam ekstensi dikelola untuk C++, lihat contoh "ManagedCWinFormWiz" di Visual Studio .NET bantuan.
Properti

ID Artikel: 307398 - Tinjauan Terakhir: 29 Jan 2017 - Revisi: 1

Tanggapan