C++๋ ํ์ผ๋ก/์์ ๋ฌธ์์ ์ถ๋ ฅ ๋ฐ ์
๋ ฅ์ ์ํํ๊ธฐ ์ํด ๋ค์ ํด๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ofstream: ํ์ผ์ ์ธ ์คํธ๋ฆผ ํด๋์ค
- ifstream: ํ์ผ์์ ์ฝ์ ์คํธ๋ฆผ ํด๋์ค
- fstream: ํ์ผ์ ์ฝ๊ณ ์ธ ์ ์๋ ์คํธ๋ฆผ ํด๋์ค์ ๋๋ค.
- istream์ด๋ฌํ ํด๋์ค๋ ํด๋์ค ๋ฐ ์์ ์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก ํ์๋ฉ๋๋ค ostream. ์ ํ์ด ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ด๋ฏธ ์ฌ์ฉํ์ต๋๋ค. cin๋ class ์ ๊ฐ์ฒด istream์ด๊ณ cout๋ class ์ ๊ฐ์ฒด์ ๋๋ค ostream. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํ์ผ ์คํธ๋ฆผ๊ณผ ๊ด๋ จ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ค, ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์ผ ์คํธ๋ฆผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค . ๋จ, ์ด๋ฌํ ์คํธ๋ฆผ์ ์ค์ ํ์ผ cin๊ณผ cout์ฐ๊ฒฐํด์ผ ํ๋ค๋ ์ ์ผํ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
// basic file operations
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}
์ด ์ฝ๋๋ ๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ example.txt์ฐ๋ฆฌ๊ฐ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฌธ์ฅ์ ์ฝ์
coutํ์ง๋ง ๋์ ํ์ผ ์คํธ๋ฆผ myfile์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋จ๊ณ๋ณ๋ก ์งํํด ๋ณด๊ฒ ์ต๋๋ค.
ํ์ผ ์ด๊ธฐ
์ด๋ฌํ ํด๋์ค ์ค ํ๋์ ๊ฐ์ฒด์ ๋ํด ์ผ๋ฐ์ ์ผ๋ก ์ํ๋๋ ์ฒซ ๋ฒ์งธ ์์ ์ ๊ฐ์ฒด๋ฅผ ์ค์ ํ์ผ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค. ์ด ์ ์ฐจ๋ ํ์ผ์ ์ฌ๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค . ์ด๋ฆฐ ํ์ผ์ ํ๋ก๊ทธ๋จ ๋ด์์ ์คํธ๋ฆผ (์ฆ, ์ด๋ฌํ ํด๋์ค ์ค ํ๋์ ๊ฐ์ฒด, ์ด์ ์์์๋ this myfile)์ผ๋ก ํ์๋๋ฉฐ ์ด ์คํธ๋ฆผ ๊ฐ์ฒด์์ ์ํ๋ ๋ชจ๋ ์ ๋ ฅ ๋๋ ์ถ๋ ฅ ์์ ์ ๋ค์๊ณผ ์ฐ๊ฒฐ๋ ์ค์ ํ์ผ์ ์ ์ฉ๋ฉ๋๋ค. ๊ทธ๊ฒ.
์คํธ๋ฆผ ๊ฐ์ฒด๊ฐ ์๋ ํ์ผ์ ์ด๊ธฐ ์ํด ๋ฉค๋ฒ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค open. Where ๋ ์ด๋ ค๋ ํ์ผ์ ์ด๋ฆ์ ๋ํ๋ด๋ ๋ฌธ์์ด์ด๊ณ ๋ ๋ค์ ํ๋๊ทธ์ ์กฐํฉ์ด ์๋ ์ ํ์ ๋งค๊ฐ๋ณ์์
๋๋ค.
open (filename, mode);
filenamemode
ios::in | ์ ๋ ฅ ์์ ์ ์ํด ์ฝ๋๋ค. |
ios::out | ์ถ๋ ฅ ์์ ์ ์ํด ์ฝ๋๋ค. |
ios::binary | ๋ฐ์ด๋๋ฆฌ ๋ชจ๋์์ ์ฝ๋๋ค. |
ios::ate | ํ์ผ ๋์์ ์ด๊ธฐ ์์น๋ฅผ ์ค์ ํฉ๋๋ค. ์ด ํ๋๊ทธ๊ฐ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ์ด๊ธฐ ์์น๋ ํ์ผ์ ์์์ ๋๋ค. |
ios::app | ๋ชจ๋ ์ถ๋ ฅ ์์ ์ ํ์ผ ๋์์ ์ํ๋์ด ํ์ผ์ ํ์ฌ ๋ด์ฉ์ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค. |
ios::trunc | ์ถ๋ ฅ ์์ ์ ์ํด ํ์ผ์ด ์ด๋ฆฌ๊ณ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ด์ ๋ด์ฉ์ด ์ญ์ ๋๊ณ ์ ๋ด์ฉ์ผ๋ก ๋ฐ๋๋๋ค. |
์ด๋ฌํ ๋ชจ๋ ํ๋๊ทธ๋ ๋นํธ ์ฐ์ฐ์ OR( |)๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, example.bin๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ๋ฐ์ด๋๋ฆฌ ๋ชจ๋์์ ํ์ผ์ ์ด๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋ฉ๋๋ค open.
ofstream myfile;
myfile.open ("example.bin", ios::out | ios::app | ios::binary);
ํด๋์ค ์ ๊ฐ open๋ฉค๋ฒ ํจ์ ์๋ ๋ ๋ฒ์งธ ์ธ์ ์์ด ํ์ผ์ ์ด ๋ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ๋ชจ๋๊ฐ ์์ต๋๋ค .ofstreamifstreamfstream
class | default mode parameter |
ofstream | ios::out |
ifstream | ios::in |
fstream | ios::in | ios::out |
For ifstream๋ฐ ofstreamํด๋์ค ๋ ํฌํจํ์ง ์๋ ๋ชจ๋๊ฐ ๋ฉค๋ฒ ํจ์์ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋๋๋ผ๋ (ํ๋๊ทธ๊ฐ ๊ฒฐํฉ๋จ) ์๋ ios::in์ผ๋ก ๊ฐ๊ฐ ๊ฐ์ ๋ฉ๋๋ค. ์ ๊ฒฝ์ฐ ๋ชจ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ง์ ํ์ง ์๊ณ ํจ์๊ฐ ํธ์ถ๋๋ ๊ฒฝ์ฐ์๋ง ๊ธฐ๋ณธ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ํจ์๊ฐ ํด๋น ๋งค๊ฐ๋ณ์์ ๊ฐ์ผ๋ก ํธ์ถ๋๋ฉด ๊ธฐ๋ณธ ๋ชจ๋๊ฐ ๊ฒฐํฉ๋์ง ์๊ณ ์ฌ์ ์๋ฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ ๋ชจ๋ ์์ ์ด๋ฆฐ ํ์ผ ์คํธ๋ฆผ์ ํ์ ๊ณ ๋ ค ์ฌํญ๊ณผ ๊ด๊ณ์์ด ์
๋ ฅ ๋ฐ ์ถ๋ ฅ ์์
์ ์ํํฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ ํ์ผ์ ํ
์คํธ ํ์ผ ์ด๋ผ๊ณ ํฉ๋๋ค.ios::outopen
fstream
, ์ผ๋ถ ํน์ ๋ฌธ์(์: ๊ฐํ ๋ฌธ์ ๋ฐ ์บ๋ฆฌ์ง ๋ฆฌํด ๋ฌธ์)์ ํ์์ผ๋ก ์ธํด ์ผ๋ถ ๋ฒ์ญ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ์ผ ์คํธ๋ฆผ์์ ์ํ๋๋ ์ฒซ ๋ฒ์งธ ์์
์ ์ผ๋ฐ์ ์ผ๋ก ํ์ผ์ ์ฌ๋ ๊ฒ์ด๋ฏ๋ก ์ด ์ธ ํด๋์ค์๋ ์๋์ผ๋ก open๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํ๊ณ ์ด ๋ฉค๋ฒ์ ์ ํํ ๋์ผํ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๋ ์์ฑ์๊ฐ ํฌํจ๋ฉ๋๋ค. myfile๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ฌ ์ด์ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ ์ด์ ์์ ์์ ๋์ผํ ์ด๊ธฐ ์์
์ ์ํ ํ ์๋ ์์ต๋๋ค .
ofstream myfile ("example.bin", ios::out | ios::app | ios::binary);
๋จ์ผ ๋ช
๋ น๋ฌธ์์ ๊ฐ์ฒด ๊ตฌ์ฑ๊ณผ ์คํธ๋ฆผ ์ด๊ธฐ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. ํ์ผ์ ์ฌ๋ ๋ ๊ฐ์ง ํ์์ ๋ชจ๋ ์ ํจํ๋ฉฐ ๋๋ฑํฉ๋๋ค.
ํ์ผ ์คํธ๋ฆผ์ด ์ฑ๊ณต์ ์ผ๋ก ํ์ผ์ ์ฌ๋์ง ํ์ธํ๋ ค๋ฉด member ๋ฅผ ํธ์ถํ์ฌ ์ํํ ์ ์์ต๋๋ค is_open. ์ด ๋ฉค๋ฒ ํจ์๋ ์ค์ ๋ก ์คํธ๋ฆผ ๊ฐ์ฒด๊ฐ ์ด๋ฆฐ ํ์ผ๊ณผ ์ฐ๊ฒฐ๋์ด ์๊ฑฐ๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ bool๊ฐ์ ๋ฐํํฉ๋๋ค.truefalse
if (myfile.is_open()) { /* ok, proceed with output */ }
ํ์ผ ๋ซ๊ธฐ
ํ์ผ์ ๋ํ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์์ ์ด ๋๋๋ฉด ์ด์ ์ฒด์ ์ ์๋ฆฌ๊ณ ํด๋น ๋ฆฌ์์ค๋ฅผ ๋ค์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ผ์ ๋ซ์ต๋๋ค. ์ด๋ฅผ ์ํด ์คํธ๋ฆผ์ ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค close. ์ด ๋ฉค๋ฒ ํจ์๋ ์ฐ๊ฒฐ๋ ๋ฒํผ๋ฅผ ํ๋ฌ์ํ๊ณ ํ์ผ์ ๋ซ์ต๋๋ค.
myfile.close();
์ด ๋ฉค๋ฒ ํจ์๊ฐ ํธ์ถ๋๋ฉด ์คํธ๋ฆผ ๊ฐ์ฒด๋ฅผ ๋ค์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ผ์ ์ด ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ํ์ผ์ ๋ค์ ์ด ์ ์์ต๋๋ค.
์ด๋ฆฐ ํ์ผ๊ณผ ์ฐ๊ฒฐ๋ ์ํ์์ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๋ ๊ฒฝ์ฐ ์๋ฉธ์๋ ์๋์ผ๋ก ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค close.
ํ ์คํธ ํ์ผ
ํ
์คํธ ํ์ผ ์คํธ๋ฆผ์ ios::binary์ด๊ธฐ ๋ชจ๋์ ํ๋๊ทธ๊ฐ ํฌํจ๋์ง ์์ ์คํธ๋ฆผ์
๋๋ค. ์ด๋ฌํ ํ์ผ์ ํ
์คํธ๋ฅผ ์ ์ฅํ๋๋ก ์ค๊ณ๋์์ผ๋ฏ๋ก ์
๋ ฅ ๋๋ ์ถ๋ ฅ๋๋ ๋ชจ๋ ๊ฐ์ ๋ฆฌํฐ๋ด ์ด์ง ๊ฐ๊ณผ ๋ฐ๋์ โโ์ผ์นํ์ง ์๋ ์ผ๋ถ ํ์ ๋ณํ์ ๊ฒช์ ์ ์์ต๋๋ค.
ํ
์คํธ ํ์ผ์ ๋ํ ์ฐ๊ธฐ ์์
์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ํ๋ฉ๋๋ค cout.
// writing on a text file
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ofstream myfile ("example.txt");
if (myfile.is_open())
{
myfile << "This is a line.\n";
myfile << "This is another line.\n";
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
ํ์ผ์์ ์ฝ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ํํ ์๋ ์์ต๋๋ค cin.
// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
cout << line << '\n';
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
์ด ๋ง์ง๋ง ์์ ๋ ํ ์คํธ ํ์ผ์ ์ฝ๊ณ ๊ทธ ๋ด์ฉ์ ํ๋ฉด์ ์ถ๋ ฅํฉ๋๋ค. ๋ค์์ ์ฌ์ฉํ์ฌ ํ์ผ์ ํ ์ค์ฉ ์ฝ๋ while ๋ฃจํ๋ฅผ ๋ง๋ค์์ต๋๋ค.๋์ฐฉ. ์ ์ํด ๋ฐํ๋ ๊ฐ๋์ฐฉ์คํธ๋ฆผ ๊ฐ์ฒด ์์ฒด์ ๋ํ ์ฐธ์กฐ์ด๋ฉฐ, ๋ถ์ธ ํํ์(์ด while ๋ฃจํ์์์ ๊ฐ์ด)์ผ๋ก ํ๊ฐ๋ ๋ true์คํธ๋ฆผ์ด ๋ ๋ง์ ์์ ์ ์ํํ ์ค๋น๊ฐ ๋์ด false์๊ณ ํ์ผ ๋์ ๋๋ฌํ๊ฑฐ๋ ๋ค๋ฅธ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ ๋๋ค. ๋ฐ์ํ์ต๋๋ค.
์ํ ํ๋๊ทธ ํ์ธ
๋ค์ ๋ฉค๋ฒ ํจ์๋ ์คํธ๋ฆผ์ ํน์ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค(๋ชจ๋ bool๊ฐ์ ๋ฐํํจ).
bad()true์ฝ๊ธฐ ๋๋ ์ฐ๊ธฐ ์์
์ด ์คํจํ๋ฉด ๋ฐํ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฐ๊ธฐ ์ํด ์ด๋ ค ์์ง ์์ ํ์ผ์ ์ฐ๋ ค๊ณ ํ๊ฑฐ๋ ์ฐ๋ ค๊ณ ํ๋ ์ฅ์น์ ๊ณต๊ฐ์ด ๋จ์ ์์ง ์์ ๊ฒฝ์ฐ์
๋๋ค.fail()true์ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ฐํ bad()ํ์ง๋ง ์ ์๋ฅผ ์ฝ์ผ๋ ค๊ณ ํ ๋ ์ํ๋ฒณ ๋ฌธ์๊ฐ ์ถ์ถ๋๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ ๋ฐํํฉ๋๋ค.eof()true์ฝ๊ธฐ ์ํด ์ด๋ ค ์๋ ํ์ผ์ด ๋์ ๋๋ฌํ๋ฉด ๋ฐํ ํฉ๋๋ค.good()๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ํ ํ๋๊ทธ false์
๋๋ค. ์ด์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋ฐํ๋๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฝ์ฐ์ ๋ฐํ true๋ฉ๋๋ค. goodand ๋ bad์ ํํ ๋ฐ๋๊ฐ ์๋๋๋ค( good๋ ๋ง์ ์ํ ํ๋๊ทธ๋ฅผ ํ ๋ฒ์ ํ์ธ).
๋ฉค๋ฒ ํจ์ clear()๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ํ๋๊ทธ๋ฅผ ์ฌ์ค์ ํ ์ ์์ต๋๋ค.
์คํธ๋ฆผ ์์น ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ฃ๊ธฐ
๋ชจ๋ i/o ์คํธ๋ฆผ ๊ฐ์ฒด๋ ๋ด๋ถ์ ์ผ๋ก -์ต์ํ ํ๋์ ๋ด๋ถ ์์น๋ฅผ ์ ์งํฉ๋๋ค:
ifstream์ ๊ฐ์ด ๋ค์ ์
๋ ฅ ์์
์์ ์ฝ์ ์์์ ์์น์ ํจ๊ป istream๋ด๋ถ ๊ฐ์ ธ์ค๊ธฐ ์์น ๋ฅผ ์ ์งํฉ๋๋ค.
ofstream์ ๊ฐ์ด ๋ค์ ์์๋ฅผ ์์ฑํด์ผ ํ๋ ์์น์ ํจ๊ป ostream๋ด๋ถ ํ ์์น ๋ฅผ ์ ์งํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก , ๋ get ๋ฐ put ์์นfstream ๋ฅผ ๋ชจ๋ ์ ์งํฉ๋๋ค (์: ) . ์ด๋ฌํ ๋ด๋ถ ์คํธ๋ฆผ ์์น๋ ๋ค์ ์ฝ๊ธฐ ๋๋ ์ฐ๊ธฐ ์์
์ด ์ํ๋๋ ์คํธ๋ฆผ ๋ด์ ์์น๋ฅผ โโ๊ฐ๋ฆฌํต๋๋ค. ์ด๋ฌํ ์์น๋ ๋ค์ ๋ฉค๋ฒ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ด์ฐฐํ๊ณ ์์ ํ ์ ์์ต๋๋ค.iostream
Tellg() ๋ฐ Tellp()
๋งค๊ฐ๋ณ์๊ฐ ์๋ ์ด ๋ ๋ฉค๋ฒ ํจ์ ๋ ํ์ฌ ๊ฐ์ ธ์ค๊ธฐ ์์น ( ์ ๊ฒฝ์ฐ ) ๋๋ ๋ฃ๊ธฐ ์์น ( ์ ๊ฒฝ์ฐ) streampos๋ฅผ ๋ํ๋ด๋ ์ ํ์ธ ๋ฉค๋ฒ ์ ํ์ ๊ฐ์ ๋ฐํํฉ๋๋ค .tellgtellp
Seekg() ๋ฐ seekp()
์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด get ๋ฐ put ์์น ์ ์์น๋ฅผ โโ๋ณ๊ฒฝํ ์ ์์ต๋๋ค . ๋ ํจ์ ๋ชจ๋ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ํ๋กํ ํ์
์ผ๋ก ์ค๋ฒ๋ก๋๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด ํ๋กํ ํ์
์ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ ํฌ์ธํฐ๊ฐ ์ ๋ ์์น๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค (ํ์ผ ์์ ๋ถ๋ถ๋ถํฐ ๊ณ์ฐ). ์ด ๋งค๊ฐ๋ณ์์ ์ ํ์ ์ด๋ฉฐ , ์ด๋ ํจ์ ๋ฐ ์์ ๋ฐํ๋ ๊ฒ๊ณผ ๋์ผํ ์ ํ ์
๋๋ค. ์ด ํจ์์ ๋ค๋ฅธ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด ํ๋กํ ํ์
์ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ๋ฃ๊ธฐ ์์น ๋ ๋งค๊ฐ๋ณ์์ ์ํด ๊ฒฐ์ ๋ ํน์ ์ง์ ์ ์๋์ ์ธ ์คํ์
๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค . ์ ํ ์
๋๋ค. ๋ ์ ํ ์
๋๋ค .
seekg ( position );
seekp ( position );
positionstreampostellgtellp
seekg ( offset, direction );
seekp ( offset, direction );
directionoffsetstreamoffdirectionseekdir์คํ์
์ด ๊ณ์ฐ๋๋ ์ง์ ์ ๊ฒฐ์ ํ๋ ์ด๊ฑฐํ ์ ํ ์ผ๋ก, ๋ค์ ๊ฐ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ios::beg | ์คํธ๋ฆผ์ ์์๋ถํฐ ๊ณ์ฐ๋ ์คํ์ |
ios::cur | ํ์ฌ ์์น์์ ๊ณ์ฐ๋ ์คํ์ |
ios::end | ์คํธ๋ฆผ ๋์์ ๊ณ์ฐ๋ ์คํ์ |
๋ค์ ์์ ๋ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ป๊ธฐ ์ํด ๋ฐฉ๊ธ ๋ณธ ๋ฉค๋ฒ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// obtaining file size
#include <iostream>
#include <fstream>
using namespace std;
int main () {
streampos begin,end;
ifstream myfile ("example.bin", ios::binary);
begin = myfile.tellg();
myfile.seekg (0, ios::end);
end = myfile.tellg();
myfile.close();
cout << "size is: " << (end-begin) << " bytes.\n";
return 0;
}
๋ณ์์ ์ฌ์ฉํ ์ ํ begin๊ณผ end๋ค์ ์ ํ์ธํ์ญ์์ค.
streampos size;
streampos๋ฒํผ ๋ฐ ํ์ผ ์์น ์ง์ ์ ์ฌ์ฉ๋๋ ํน์ ์ ํ์ด๋ฉฐ ์์ ๋ฐํ๋๋ ์ ํ file.tellg()์
๋๋ค. ์ด ์ ํ์ ๊ฐ์ ๋์ผํ ์ ํ์ ๋ค๋ฅธ ๊ฐ์์ ์์ ํ๊ฒ ๋บ ์ ์์ผ๋ฉฐ ํ์ผ ํฌ๊ธฐ๋ฅผ ํฌํจํ ๋งํผ ์ถฉ๋ถํ ํฐ ์ ์ ์ ํ์ผ๋ก ๋ณํํ ์๋ ์์ต๋๋ค.
์ด๋ฌํ ์คํธ๋ฆผ ์์น ์ง์ ๊ธฐ๋ฅ์ ๋ ๊ฐ์ง ํน์ ์ ํ์ธ streampos๋ฐ ๋ฅผ ์ฌ์ฉ streamoffํฉ๋๋ค. ์ด๋ฌํ ์ ํ์ ์คํธ๋ฆผ ํด๋์ค์ ๋ฉค๋ฒ ์ ํ์ผ๋ก๋ ์ ์๋ฉ๋๋ค.
์ ํ | ํ์ ์ ํ | ์ค๋ช |
streampos | ios::pos_type | ๋ก ์ ์๋ฉ๋๋ค fpos<mbstate_t>. ๋ณํํ streamoff์ ์์ผ๋ฉฐ ์ด๋ฌํ ์ ํ์ ๊ฐ์ ๋ํ๊ฑฐ๋ ๋บ ์ ์์ต๋๋ค. |
streamoff | ios::off_type | int๊ธฐ๋ณธ ์ ์ ์ ํ( ๋๋ ์ ๊ฐ์) ์ค ํ๋์ ๋ณ์นญ์ ๋๋ค long long. |
์์ ๊ฐ ๋ฉค๋ฒ ์ ํ์ ํด๋นํ๋ ๋น๋ฉค๋ฒ์ ๋ณ์นญ์ ๋๋ค(์์ ํ ๋์ผํ ์ ํ์). ์ด๋ ๊ฒ์ด ์ฌ์ฉ๋๋์ง๋ ์ค์ํ์ง ์์ต๋๋ค. ๋ฉค๋ฒ ์ ํ์ ๋ชจ๋ ์คํธ๋ฆผ ๊ฐ์ฒด์์ ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋ ์ผ๋ฐ์ ์ด์ง๋ง(ํน์ดํ ์ ํ์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ์คํธ๋ฆผ์์๋) ๋น๋ฉค๋ฒ ์ ํ์ ์ญ์ฌ์ ์ด์ ๋ก ๊ธฐ์กด ์ฝ๋์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ์ด๋๋ฆฌ ํ์ผ
<<์ด์ง ํ์ผ์ ๊ฒฝ์ฐ ์ถ์ถ ๋ฐ ์ฝ์
์ฐ์ฐ์( ๋ฐ >>)์ ๊ฐ์ ๊ธฐ๋ฅ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ getline๊ฒ์ ํจ์จ์ ์ด์ง ์์ต๋๋ค. ๋ฐ์ดํฐ ํ์์ ์ง์ ํ ํ์๊ฐ ์๊ณ ๋ฐ์ดํฐ๊ฐ ์ค ํ์์ด ์๋ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
ํ์ผ ์คํธ๋ฆผ์๋ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ๊ณ ์ฐ๋๋ก ํน๋ณํ ์ค๊ณ๋ ๋ ๊ฐ์ง ๋ฉค๋ฒ ํจ์ write๋ฐ read. ์ฒซ ๋ฒ์งธ( )๋ (์ ์ํด ์์๋ ) write๋ฉค๋ฒ ํจ์์
๋๋ค . ๊ทธ๋ฆฌ๊ณ (์ ์ํด ์์๋จ ) ์ ๋ฉค๋ฒ ํจ์์
๋๋ค . ํด๋์ค์ ๊ฐ์ฒด ์๋ ๋ ๋ค ์์ต๋๋ค. ํ๋กํ ํ์
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. write ( memory_block, size ); ์ฝ๊ธฐ ( memory_block, ํฌ๊ธฐ ); Where ์ ํ (ํฌ์ธํฐostreamofstreamreadistreamifstreamfstream
memory_blockchar*char), ์ฝ๊ธฐ ๋ฐ์ดํฐ ์์๊ฐ ์ ์ฅ๋๊ฑฐ๋ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํธ ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ๋ํ๋ ๋๋ค. ๋งค๊ฐ๋ณ์ ๋ size๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์์ ์ฝ๊ฑฐ๋ ์ธ ๋ฌธ์ ์๋ฅผ ์ง์ ํ๋ ์ ์ ๊ฐ์ ๋๋ค.
// reading an entire binary file
#include <iostream>
#include <fstream>
using namespace std;
int main () {
streampos size;
char * memblock;
ifstream file ("example.bin", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
cout << "the entire file content is in memory";
delete[] memblock;
}
else cout << "Unable to open file";
return 0;
}
์ด ์์์ ์ ์ฒด ํ์ผ์ ์ฝ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์ ์ฅํฉ๋๋ค. ์ด ์์
์ด ์ด๋ป๊ฒ ์ํ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ํ์ผ์ด ios::ateํ๋๊ทธ์ ํจ๊ป ์ด๋ ค ์์ต๋๋ค. ์ฆ, get ํฌ์ธํฐ๊ฐ ํ์ผ ๋์ ์์นํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด member ๋ฅผ ํธ์ถํ ๋ tellg()ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ง์ ์ป์ ์ ์์ต๋๋ค.
ํ์ผ ํฌ๊ธฐ๋ฅผ ์ป์ ํ์๋ ์ ์ฒด ํ์ผ์ ์ ์ฅํ ์ ์์ ๋งํผ ํฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก ํ ๋น์ ์์ฒญํฉ๋๋ค.
memblock = new char[size];
๊ทธ ์งํ์ ํ์ผ์ ์์ ๋ถ๋ถ์ get ์์น ๋ฅผ ์ค์ ํ๊ณ (๋ง์ง๋ง์ ์ด ํฌ์ธํฐ๋ก ํ์ผ์ ์ด์์์ ๊ธฐ์ตํ์ญ์์ค) ์ ์ฒด ํ์ผ์ ์ฝ๊ณ ๋ง์ง๋ง์ผ๋ก ๋ซ์ต๋๋ค.
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
์ด ์์ ์์ ์ฐ๋ฆฌ๋ ํ์ผ์์ ์ป์ ๋ฐ์ดํฐ๋ก ์์
ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ํ๋ก๊ทธ๋จ์ ๋จ์ํ ํ์ผ์ ๋ด์ฉ์ด ๋ฉ๋ชจ๋ฆฌ์ ์์์ ์๋ฆฌ๊ณ ๋๋ฉ๋๋ค.
๋ฒํผ ๋ฐ ๋๊ธฐํ
ํ์ผ ์คํธ๋ฆผ์ผ๋ก ์์
ํ ๋ ์ด๋ฌํ ์คํธ๋ฆผ์ ์ ํ์ ๋ด๋ถ ๋ฒํผ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ฉ๋๋ค streambuf. ์ด ๋ฒํผ ๊ฐ์ฒด๋ ์คํธ๋ฆผ๊ณผ ์ค์ ํ์ผ ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ํ๋ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฅผ ์ฌ์ฉ ofstreamํ๋ฉด ๋ฉค๋ฒ ํจ์ put(๋จ์ผ ๋ฌธ์๋ฅผ ๊ธฐ๋กํจ)๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์คํธ๋ฆผ์ด ์ฐ๊ฒฐ๋ ์ค์ ํ์ผ์ ์ง์ ๊ธฐ๋ก๋๋ ๋์ ์ด ์ค๊ฐ ๋ฒํผ์ ๋ฌธ์๊ฐ ์ฝ์
๋ ์ ์์ต๋๋ค.
์ด์ ์ฒด์ ๋ ํ์ผ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ์ํ ๋ฒํผ๋ง์ ๋ค๋ฅธ ๊ณ์ธต์ ์ ์ํ ์๋ ์์ต๋๋ค.
๋ฒํผ๊ฐ ํ๋ฌ์๋๋ฉด ๋ฒํผ์ ํฌํจ๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ๋งค์ฒด์ ๊ธฐ๋ก๋ฉ๋๋ค(์ถ๋ ฅ ์คํธ๋ฆผ์ธ ๊ฒฝ์ฐ). ์ด ํ๋ก์ธ์ค๋ฅผ ๋๊ธฐํ ๋ผ๊ณ ํฉ๋๋ค.๋ค์ ์ํฉ ์ค ํ๋์์ ๋ฐ์ํฉ๋๋ค.
- ํ์ผ์ด ๋ซํ ๋: ํ์ผ ์ ๋ซ๊ธฐ ์ ์ ์์ง ํ๋ฌ์๋์ง ์์ ๋ชจ๋ ๋ฒํผ๊ฐ ๋๊ธฐํ๋๊ณ ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ๋งค์ฒด์ ์ฐ๊ฑฐ๋ ์ฝํ๋๋ค.
- ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐผ์ ๋: ๋ฒํผ๋ ํน์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋๋ค. ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ์๋์ผ๋ก ๋๊ธฐํ๋ฉ๋๋ค.
- ๋ช ์์ ์ผ๋ก, ์กฐ์์์ ํจ๊ป: ์คํธ๋ฆผ์์ ํน์ ์กฐ์์๊ฐ ์ฌ์ฉ๋๋ฉด ๋ช ์์ ๋๊ธฐํ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ์กฐ์์๋ flush๋ฐ endl.
- ๋ช ์์ ์ผ๋ก ๋ฉค๋ฒ ํจ์ sync() ์ฌ์ฉ: ์คํธ๋ฆผ์ ๋ฉค๋ฒ ํจ์๋ฅผ ํธ์ถ sync()ํ๋ฉด ์ฆ๊ฐ์ ์ธ ๋๊ธฐํ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ํจ์๋ ์คํธ๋ฆผ์ ์ฐ๊ฒฐ๋ ๋ฒํผ๊ฐ ์๊ฑฐ๋ ์คํจํ ๊ฒฝ์ฐ -1int ๊ณผ ๊ฐ์ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด(์คํธ๋ฆผ ๋ฒํผ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋๊ธฐํ๋ ๊ฒฝ์ฐ) ๋ฅผ ๋ฐํํฉ๋๋ค .0
'๐ Development Study > ๐จ๐พโ๐ป C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋งํธ ํฌ์ธํฐ (0) | 2023.01.03 |
---|---|
์ ์ฒ๋ฆฌ๊ธฐ #define (1) | 2022.08.22 |
exception (0) | 2022.08.22 |
ํ๋ณํ (0) | 2022.08.22 |
๋คํ์ฑ (0) | 2022.08.22 |
๋๊ธ