2010-03-18 4 views
1

텍스트 파일을 읽고 Safearray에 데이터를 저장해야합니다.Safearray로 텍스트 파일 읽기

나는이 기능을 시도 :

bool Parse::LoadTxtFileIntoSafearray(string* strPath, SAFEARRAY** pByteArray) 
{ 
bool bReturn = false; 

string line; 
int iOffset = 0; 
char* pcBuffer = NULL; 

std::ifstream infile (strPath->data()); 
if (!infile.fail()) 
{ 
    infile.seekg(0, std::ios::end); 
    int iSize = infile.tellg(); 
    infile.seekg(0); 
    pcBuffer = (char*)calloc(iSize,sizeof(char)); 
    if(pcBuffer) 
    { 
     infile.read(pcBuffer, iSize); 
     iSize = strlen(pcBuffer); 
     SAFEARRAYBOUND sb; 
     sb.cElements = iSize; 
     sb.lLbound = 0; 
     *pByteArray = SafeArrayCreate(VT_UI1,1,&sb); 

     BYTE* pData; 
     SafeArrayAccessData(*pByteArray,(void **)&pData); 
     memcpy(pData, pcBuffer,iSize); 
     SafeArrayUnaccessData(*pByteArray); 
     delete pcBuffer; 
     pcBuffer = NULL; 
     bReturn = true; 
    } 
} 
return bReturn; 
} 

문제는 ... 파일의 크기가 읽기 바이트보다 더 큰 것입니다

잘못 무엇입니까?

안부 man-page에서 언급 한 바와 같이

+0

주제에서 벗어나지 만 왜 'calloc'에서'delete'를 사용하고 있습니까? – Naveen

+1

및 "safearray"란 무엇입니까? –

+0

이유가 .. 또한 로컬 버퍼를 만들 수 있습니다 .. 나는 그것을 바꿉니다. – camelord

답변

0

camelord는 바이트 개까지 읽을 시도를 참조하십시오. 모든 바이트를 읽으려면 반복해야합니다.

사이드 노트 : 정적 파일 작업을 항상 보장 할 수는 없으므로 파일 크기가 변경되지 않는다고 가정하면 문제가 발생할 수 있습니다 (버퍼 오버런, 전체 파일 읽기, 무한 루프).