2진 입출력에 관한 질문입니다.
연하얀
#includeiostream
#include string
#include fstream
using namespace std;
class Video
{
private:
char *name;
int number;
public:
// ifstream fin;
// ofstream fout;
Video()
{
name = new char[30];
strcpy(name , nothing);
number = 0;
}
Video(char *imsi_name, int imsi_number)
{
name = new char[strlen(imsi_name)+1];
strcpy(name, imsi_name);
number = imsi_number;
}
int Get_number()
{
return number;
}
char *Get_name()
{
return name;
}
void Set_number(int k)
{
number = k;
}
void Set_name(char *imsi)
{
delete[] name;
name = new char[strlen(imsi)+1];
strcpy(name, imsi);
}
};
void main()
{
Video *v[100];
Video kk;
Video kb(jung sengwon!, 2000);
int i= 0;
ifstream fin;
ofstream fout;
fout.open(c:\\video3.txt, /*ios_base::out |*/ ios_base::app | ios_base::binary);
fin.open(c:\\video3.txt, /*ios_base::in | */ios_base::binary);
v[0] = new Video(kk1, 1200);
v[1] = new Video(kk2, 2200);
v[2] = new Video(kk3, 3200);
// cout sizeof(Video) endl;
// cout sizeof(kk) endl;
// cout sizeof(kb) endl;
//cout v.Get_number() v.Get_name() endl;
//cout size of v sizeof(v) endl;
for(i = 0; i 3; i++)
fout.write( (char*)v[i], sizeof(kk) );
i = 0;
while( fin.read( (char*)v[i], sizeof(kk) ) )
{
cout v[i]-Get_name() : v[i]-Get_number() endl;
i++;
}}
//처음 파일이 없을때는 화면에 아무것도 출력이 않됩니다.
또 실행을 해보면 2개밖에 저장이 않되 있습니다.
왜 그렇습니까?
혹시 포인터 같은 경우에는 파일에 저장할때 별도의 설정을 해야 합니까?
-
소녀틳향기
wirte한후, flush가 빠졌네요. 대부분의 컴퓨터 입출력 처리에서는 write 메소드등을 사용해서 출력했다고 해서 바로 출력이 되는건 아닙니다. 걔중에는 처리 성능을 높이기 위해서 버퍼를 두고 있죠. 그래서 버퍼가 가득차서 비워야 하거나, flush 메소드로 직접 호출해줘야 파일에 내용이 저장되는 경우가 있습니다. 이부분이 빠져서, 처음에 저장이 안된거 같네요.