안녕하세요
std::ifstream Fileio;
Fileio.open("Analysis.pdf",ios::in|ios::binary|ios::ate);
ofstream out("test.pdf",ios::out|ios::binary|ios::trunc);
ofstream outlog("test.log",ios::out|ios::binary|ios::trunc);
vector vecitemp;
int tempCount = 1;
int tempsize = 10000; //기본 블록 단위 크기
int templen = 0;
long tempcout;
long Nowcout=0;
long randnum = 0;
bool CheckRandValue = true;
Fileio.clear();
Fileio.seekg(0,ios::end); //커서 끝자리
tempcout = Fileio.tellg(); //총사이즈
Fileio.seekg(0,ios::beg); //다시 처음으로 커서 이동
templen = tempcout /tempsize;
char *tempchar = new char[tempsize];
//파일 사이즈
cout << "file size : " << tempcout << endl;
//파일 배분 사이즈
cout << "file len count : " << templen << endl;
tempCount = 1;
while( tempCount <=templen)
{
Fileio.read(tempchar,tempsize);
vecitemp.push_back(tempchar);
// out.write(tempchar,tempsize);
Nowcout = tempsize*tempCount;
tempCount++;
}
int sumcount = tempcout - Nowcout;
if(sumcount != 0)
{
Fileio.read(tempchar,sumcount);
vecitemp.push_back(tempchar);
//out.write(tempchar,sumcount);
}
std::copy(vecitemp.begin(), vecitemp.end(), ostream_iterator(out, ""));
cout << "ok" << endl;
out.flush();
out.close();
Fileio.close();
이렇게 처리 했을경우
char로 하면 해당 파일이 정상적으로 저장이 되는데..
string으로 했을경우 파일 용량이 축소 되어서 저장됩니다.ㅜㅜ;;
원본 파일 크기 104KB
저장했을경우에는 14kb 왜 이런 현상이 일어나는지 개념 자체가 없습니다.
너무 개념 없다 생각하신다면 사과드립니다.
밑에 처럼도 수정을 해봤는데..
int ssxxx =0;
int sxf=0;
int tkc=0;
char rbuf[256] = {0x00, };
while( tempCount <=templen)
{
Fileio.seekg(Nowcout,ios::beg);
Fileio.read(tempchar,tempsize);
cout << "tempchar :" << strlen(tempchar) << endl;
cout << "tempsize :" << tempsize << endl;
cout << "Nowcout :" << Nowcout << endl;
ssxxx = tempsize - strlen(tempchar);
if (ssxxx != 0)
{
sxf = 0;
while( sxf < ssxxx)
{
strcat(tempchar,rbuf);
sxf++;
}
}
cout << "new tempchar :" << strlen(tempchar) << endl;
vecitemp.push_back(tempchar);
Nowcout = tempsize*tempCount;
tempCount++;
}
int sumcount = tempcout - Nowcout;
if(sumcount != 0)
{
cout << "Nowcout + sumcount :" << Nowcout+sumcount << endl;
Fileio.seekg(Nowcout,ios::beg);
Fileio.read(tempchar,sumcount);
vecitemp.push_back(tempchar);
//out.write(tempchar,sumcount);
}
사이즈를 짤라서 하고 싶어서 저렇게 했는데... ;;; 저것을 수정해서 하려면 어떻게 해야 할까요?
|