ファイルの作成と読み込みやフォルダの作り方

スクリーンショット_121712_090255_PM

メモ帳やワードやエクセルといったプログラムはデータを保存したり、読み込んだりする機能があります。

このような保存・読み込みなどの処理をVisual C++のプログラムで記述する方法を紹介します。

方法を説明するにあたって、

  1. ボタン1を押すとフォルダを作り、そのフォルダの中に「1行目、2行目」というテキストファイルを作成する
  2. ボタン2を押すとテキストファイルを読み込みメッセージボックスで一行ずつ表示する

というプログラムを作成して解説します。

このプログラムを理解できれば、ファイル処理の基礎ができたといっていいでしょう。

プログラムの作成

GUI

まずは、Windowsフォームアプリケーションでプロジェクトを作成してください。

そして、以下のようにボタンを二つ、saveFileDialog、openFileDialogを設置してください。

スクリーンショット_121712_090255_PM

そして、button1とbutton2をダブルクリックして、コードを記述していきます。

インクルード

フォルダを作成する際に、_mkdirという命令を使います。この命令を使うために

#include <direct.h>

をForm1.hの先頭に記入しておきます。そして、namespaceの部分にusing namespace System::IO;を追加します。

以上のことをすると以下のようになります。

#include  //追加
#pragma once

namespace openfile {

	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; //追加

プログラム

ボタン1、2を押す際の命令を以下のように記述してください。

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
	String^ outfile;
	if(saveFileDialog1->ShowDialog() != System::Windows::Forms::DialogResult::OK)return;
	outfile=saveFileDialog1->FileName;
	_mkdir((char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(outfile).ToPointer());
	try{
		FileStream^ fs=gcnew FileStream(outfile+"/a.txt",FileMode::Create);
		StreamWriter^ sw=gcnew StreamWriter(fs,System::Text::Encoding::GetEncoding("Shift-JIS"));
		sw->WriteLine("1行目");
		sw->WriteLine("2行目");
		sw->Close();
	}catch(System::Exception^ e){
		MessageBox::Show(e->ToString());
	}
}
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
	if(openFileDialog1->ShowDialog() != System::Windows::Forms::DialogResult::OK)return;
	String^ infile;
	infile=openFileDialog1->FileName;
	try{
		FileStream^ fs=gcnew FileStream(infile,FileMode::Open);
		StreamReader^ sr=gcnew StreamReader(fs,System::Text::Encoding::GetEncoding("Shift-JIS"));
		String^ ss="";
		while(1){
			ss=sr->ReadLine();
			if(ss==nullptr)break;
			MessageBox::Show(ss);
		}
		sr->Close();
	}catch(System::Exception^ e){
		MessageBox::Show(e->ToString());
	}
}

解説

フォルダやファイルの作成

はじめに

saveFileDialog1->ShowDialog()

で保存用ダイアローグを開いています。ここでキャンセルをおすとreturnが実行されます。

そして、選んだファイルのパスはFileNameにて取得可能です。

選んだところにフォルダを作るために

_mkdir(…)

を実行しています。String^から(char*)へ変換するために変換用の命令をかましています。

FileStreamで、作成したフォルダにa.txtというファイルを作成しています。

そして、WriteLineで内容を入力していきます。

ファイルを開く

ファイルを開くときもファイルを作成したときと同じような手順をふみます。

まず、ShowDialog()でオープンファイルダイアローグを開きます。

そして、選択したファイルのパスをFileNameで取得します。

あとは、ReadLine()で一行ずつ読むだけです。

著者:安井 真人(やすい まさと)