現在オフラインです。再接続するためにインターネットの接続を待っています

お使いのブラウザーはサポートされていません

このサイトを利用するには、ブラウザーを更新する必要があります。

Internet Explorer を最新バージョンに更新する

Visual C++ 2005 または Visual C++ .NET で基本的なファイル入出力を行う方法

この記事は、以前は次の ID で公開されていました: JP307398
Microsoft Visual C# .NET については、次の資料を参照してください。304430
Microsoft Visual Basic .NET については、次の資料を参照してください。304427

この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。
  • System.ComponentModel
  • System.Windows.Forms
  • System.Drawing
概要
この資料では、Microsoft Visual C++ 2005 または Microsoft Visual C++ .NET で 6 つの基本的なファイル入出力 (I/O) 操作を行う方法について、手順を追って説明します。.NET Framework を初めて使用する場合でも、.NET Framework におけるファイル操作用のオブジェクト モデルは、Microsoft Visual Studio 6.0 を使用する開発者の多くに馴染みのある FileSystemObject (FSO) に似ています。より簡単に理解できるように、この資料では、次の「サポート技術情報」 (Microsoft Knowledge Base) の資料を基にこの機能について説明します。
186118 Visual Basic で FileSystemObject を使用する方法
FileSystemObject は .NET Framework でも使用することができます。FileSystemObject はコンポーネント オブジェクト モデル (COM) コンポーネントであるため、.NET Framework は相互運用層経由でオブジェクトにアクセスする必要があります。このオブジェクトを使用する場合、.NET Framework によってコンポーネントのラッパーが生成されます。ただし、.NET Framework の File クラス、FileInfo クラス、Directory、DirectoryInfo クラス、および他の関連クラスは、FSO で使用できない機能を提供し、相互運用層のオーバーヘッドもありません。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Visual C++ 2005 または Visual C++ .NET

ファイル入出力操作の説明

この資料の例では、基本的なファイル入出力操作について説明します。「サンプル プロジェクトの作成と実行」では、以下の 6 つのファイル入出力操作を説明するサンプル プログラムの作成方法を説明します。
  • テキスト ファイルの読み取り
  • テキスト ファイルへの書き込み
  • ファイル情報の表示
  • ディスク ドライブの一覧
  • フォルダの一覧
  • ファイルの一覧

テキスト ファイルの読み取り

次のサンプル コードでは、StreamReader クラスを使用して、System.ini ファイルを読み取ります。ファイルの内容は ListBox コントロールに追加されます。try...catch ブロックは、ファイルが空の場合にプログラムに警告するために使用します。ファイルの最後に到達したことを判断する方法は多数ありますが、このサンプルでは、Peek メソッドを使用して、ファイルを読み取る前に次の行を調べています。
  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);	}}				
:Visual C++ 2005 で上記のコードのコンパイルを正常終了するには、共通言語ランタイム サポート コンパイラ オプション (/clr:oldSyntax) を追加する必要があります。共通言語ランタイム サポート コンパイラ オプションを追加するには、次の手順を実行します。
  1. [プロジェクト] メニューの [ProjectName のプロパティ] をクリックします。

    : ProjectName には、プロジェクトの名前が入ります。
  2. [構成プロパティ] を展開し、[全般] をクリックします。
  3. 右側のウィンドウで、[共通言語ランタイム サポート] プロジェクト設定の [共通言語ランタイム サポート、古い構文 (/clr:oldSyntax)] をクリックします。
  4. [適用] をクリックし、[OK] をクリックします。
共通言語ランタイム サポート コンパイラ オプションの詳細を参照するには、次の MSDN (Microsoft Developer Network) Web サイトをクリックしてください。

テキスト ファイルへの書き込み

このサンプル コードでは、StreamWriter クラスを使用して、ファイルの作成と書き込みを行います。既存のファイルがある場合、同じ方法でそのファイルを開くことができます。
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);				

ファイル情報の表示

このサンプル コードでは、FileInfo クラスを使用して、ファイルのプロパティにアクセスします。このサンプルでは、Notepad.exe のプロパティにアクセスします。プロパティは 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()) );				

ディスク ドライブの一覧

このサンプル コードでは、Directory および Drive クラスを使用して、システム上の論理ドライブの一覧を取得します。このサンプルでは、結果が 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]);  } 				

サブフォルダの一覧

このサンプル コードでは、Directory クラスの GetDirectories メソッドを使用して、フォルダの一覧を取得します。
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]);}				

ファイルの一覧

このサンプル コードでは、Directory クラスの GetFiles メソッドを使用して、ファイルの一覧を取得します。
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]);}				
ファイルの一覧を取得するときに、ファイルへのアクセスに失敗する場合があります。原因として考えられるのは、ファイルが存在しない、ファイルが使用中である、ユーザーがアクセスしようとするフォルダまたはファイルに対して権限がない、などです。コードを作成するときにこれらの可能性を考え、生成される例外の処理を考慮することが重要です。

手順例

  1. Microsoft Visual Studio .NET、Microsoft Visual Studio 2005、または Microsoft Visual C++ 2005 Express Edition を起動します。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. [プロジェクトの種類] ボックスの一覧の [Visual C++ プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [Windows フォーム アプリケーション (.NET)] をクリックします。

    : Visual Studio 2005 および Visual C++ 2005 Express Edition では、[プロジェクトの種類] ボックスの一覧の [Visual C++] をクリックします。[テンプレート] ボックスの一覧の [Windows フォーム アプリケーション] をクリックします。
  4. [プロジェクト名] ボックスに、Q307398 と入力し、[場所] ボックスに C:\ と入力して、[OK] をクリックします。
  5. デザイン ビューで Form1 フォームを開き、F4 キーを押して、[プロパティ] ウィンドウを開きます。
  6. [プロパティ] ウィンドウで、[Size] フォルダを展開します。[Width] ボックスに 700 と入力し、[Height] ボックスに 320 と入力します。
  7. ListBox コントロールを 1 つ、Button コントロールを 6 つ、Form1 に追加します。

    : ツールボックスを表示するには、[表示] メニューの [ツールボックス] をクリックします。
  8. [プロパティ] ウィンドウで、上記のコントロールの Location、(Name)、Size、TabIndex、および Text プロパティを、以下のように変更します。
    Control IDLocation(Name)SizeTabIndexText
    button1500, 32button1112, 231テキスト ファイルの読み取り
    button2500, 64button2112, 232テキスト ファイルへの書き込み
    button3500, 96button3112, 233ファイル情報の表示
    button4500, 128button4112, 234ドライブの一覧
    button5500, 160button5112, 235サブフォルダの一覧
    button6500, 192button6112, 236ファイルの一覧
    listBox124, 24listBox1450, 2000listBox1
  9. Form1.h ファイルを開きます。Form1 のクラスの宣言に、private の String 変数を以下のコードで宣言します。
    private:		String *windir;
  10. Form1 のクラスのコンストラクタに、次のコードを追加します。
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. ファイル入出力操作を行うには、System.IO 名前空間を追加します
  12. Shift + F7 キーを押して、Form1 をデザイン ビュー開きます。[テキスト ファイルの読み取り] をダブルクリックして、次のコードを貼り付けます。

    : Visual C++ 2005 では、[表示] メニューの [デザイナ] をクリックします。
    // 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. Form1 のデザイン ビューで、[テキスト ファイルへの書き込み] をダブルクリックして、次のコードを貼り付けます。
    // 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. Form1 のデザイン ビューで、[テキスト ファイルへの書き込み] をダブルクリックし、[ファイル情報の表示] をダブルクリックし、次のコードをメソッドに貼り付けます。
    // 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. Form1 のデザイン ビューで、[ファイル情報の表示] をダブルクリックして、次のコードを貼り付けます。
    // 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. Form1 のデザイン ビューで、[サブフォルダの一覧] ボタンをダブルクリックして、次のコードを貼り付けます。
    // 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. Form1 のデザイン ビューで、[ファイルの一覧] をダブルクリックして、次のコードを貼り付けます。
    // 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. プログラムをビルドして実行するには、Ctrl + F5 キーを押します。

完全なサンプル コード

: Visual C++ 2005 で実行する場合には、コードを変更する必要があります。
//Form1.h#pragma oncenamespace Q307398{	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 Q307398;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;}
関連情報
詳細については、次のマイクロソフト Web サイトを参照してください。Visual C++ .NET の詳細については、次の Microsoft Usenet ニュースグループを参照してください。Visual C++ のマネージ拡張における Windows フォーム作成の詳細については、Visual Studio .NET のヘルプにあるサンプル "ManagedCWinFormWiz" を参照してください。
プロパティ

文書番号:307398 - 最終更新日: 08/31/2007 01:35:00 - リビジョン: 3.4

  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • kbhowtomaster kbwindowsforms kbio kbnewsgrouplink kbforms kbfileio KB307398
フィードバック
ript> >>ow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");