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 |