ifstream, ofstream, fstream 을 통한 파일 읽기, 쓰기, 복사
콘솔 출력 중 정렬, 진법, 지수형식 출력에 대한 예제
#include <string>
#include <tchar.h>

#include <iostream>
#include <fstream>
#include <sstream>

#include <iomanip>
#include <bitset>

#include <vector>
#include <algorithm>

using namespace std;


void read_file(wstring& file1)
{
	//파일 읽기
	wifstream file;
	file.open(file1.c_str(), ios_base::in);
	file.imbue(locale("korean"));
	if (!file)
	{
		wcout << _T("error") << endl;
		return;
	}

	/*
	//특정 위치로 이동
	wstreampos pos = 2;
	file.seekg(pos);
	*/

	wstring line;
	while (getline(file, line))
	{
		wstringstream linestream(line);

		wstring name;
		getline(linestream, name, L'/');

		wstring content;
		getline(linestream, content);

		wcout << name << _T("\t") << content << endl;
	}
	file.close();
}

void copy_file(wstring& file1, wstring& file2)
{
	wifstream in(file1.c_str(), ios_base::binary); //읽기전용 ifstream binary
	wofstream out(file2.c_str(), ios_base::binary); //쓰기전용 ofstream binary
	out << in.rdbuf();

	in.close();
	out.close();
}

void write_file(wstring& file1)
{
	wifstream file(file1.c_str());
	if (file.is_open())
		wcout << _T("파일 존재") << endl;
	else
		wcout << _T("파일 미존재") << endl;
	file.close();


	//출력방향지정|파일연후 맨뒤로 이동|데어터쓸때마다 맨뒤로 이동
	wofstream out(file1.c_str(), ios_base::out | ios_base::ate | ios_base::app);
	out.imbue(locale("korean"));

	wstring line1 = _T("이름(name)1/내용(content)1\n");
	out << line1;
	//out.write(line1.c_str(), line1.length() * sizeof(TCHAR));

	wstring line2 = _T("이름(name)2/내용(content)2\n");
	out << line2;
	//out.write(line2.c_str(), line2.length() * sizeof(TCHAR));

	//out.flush();
	out.close();
}

void size_file(wstring& file1)
{
	wifstream file(file1.c_str(), ios_base::ate);
	wstreampos end = file.tellg(); //현재 위치
	wcout << _T("file size : ") << end << _T(" bytes") << endl;

	file.close();
}

void print(const wstring& str)
{
	wcout << str << endl;
}
void read_file2(wstring& file1)
{
	wifstream file(file1.c_str());
	if (!file)
	{
		wcout << _T("error") << endl;
		return;
	}
	file.imbue(locale("korean"));

	vector<wstring> vec;
	wstring temp;
	while (file >> temp)
	{
		vec.push_back(temp);
	}
	file.close();

	for_each(vec.begin(), vec.end(), print);
}

int main()
{

	wcout.imbue(locale("korean"));	//또는 setlocale(LC_ALL, "");

	wstring file1 = _T("c:\\file.txt");
	wstring file2 = _T("c:\\copy_file.txt");

	write_file(file1);			//파일 쓰기
	read_file(file1);			//파일 읽기
	copy_file(file1, file2);	//파일 복사
	read_file2(file1);			//파일 읽기
	size_file(file1);			//파일 크기

/*
	정렬 출력
	#include <iomanip>
*/
	wcout << setiosflags(ios_base::right);			//오른쪽 정렬(15칸)
	wcout << setw(15) << _T("오른쪽 정렬") << endl;	//15칸

	wcout << resetiosflags(ios_base::adjustfield);
	wcout << setiosflags(ios_base::left);			//왼쪽 정렬
	wcout << setw(15) << _T("왼쪽 정렬") << endl;	//15칸

	wcout << resetiosflags(ios_base::adjustfield);
	wcout << setiosflags(ios_base::right);			//오른쪽 정렬
	wcout << setw(15) << _T("오른쪽 정렬") << endl;	//15칸


/*
	진법 출력 : 2, 8, 10, 16 진법
	#include <iomanip> - setbase()
	#include <bitset>  - 2진법
*/
	int num = 128;

	bitset<8> bin(num);
	wcout << bin << _T(" - ");	//2진수
	wcout << setbase(8) << num << _T(" - ");	// 8진수
	wcout << setbase(10) << num << _T(" - ");	//10진수
	wcout << setbase(16) << num << _T(" - ");	//16진수
	wcout << setbase(10) << endl;


	/*
		지수형식 출력
		#include <iostream>
		#include <iomanip>
	*/
	float f = 1234.5678999f;
	wcout << f << endl;
	wcout << scientific << setprecision(7) << f << endl;	//지수형식으로 출력
	wcout << resetiosflags(ios_base::floatfield) << setprecision(6);	//원복
	wcout << f << endl;

	return 0;
}


double 형 출력시 지수로 출력안되게 하려면..
   double d = 129319238901.1293801;
   std::cout.setf(ios_base::fixed, ios_base::floatfield);
   std::cout << d << std::endl;


16진수 문자 출력
unsigned char ch = 'A';
cout << setw(2) << setfill('0') << hex << (int)*it


'C++' 카테고리의 다른 글

Automation (자동화)  (0) 2010.11.02
COM (component object model)  (1) 2010.11.02
C++ 복사 생성자(copy constructor)와 대입 연산자(substitution operator)  (0) 2010.11.01
STL (Standard Template Library)  (0) 2010.11.01
Registry 레지스트리  (0) 2010.10.27
DLL (Dynamic Link Library)  (0) 2010.10.27
mysql connector/c++  (1) 2010.10.26
ODBC (open database connectivity)  (1) 2010.10.25