2014-09-11 6 views
0

csv 파일의 헤더를 읽는 코드가 있습니다. 우선 extenson이 .csv인지 확인합니다. 그런 다음 파일을 읽었습니다. 그러나 문제는 다른 파일의 이름을 바꾸거나 .xml 파일 또는 .docx 파일을 .csv으로 읽은 다음 읽으려고하면 파일 확장명 검사가 작동하지 않는다는 것입니다. 그런 다음 충돌합니다.
그런 경우에 적절한 오류를 던지고 싶습니다. 누구든지 도와 줄 수 있습니까? 여기에 관련 코드 조각은 다음과 같습니다C/C++에서 파일 읽기를 위해 이름이 바뀐 파일의 확장 문제

// Extracting the extension of the file. Since only csv files are allowed, 
    // for rest of the extensions, appropriate error is being thrown 

    sExt = wcsrchr(sFile, L'.'); 

    if(wcscmp(sExt, L".csv") != 0) 
    { 
     return -1; 
    } 

    _wfopen_s(&fpInpFile, sFile, L"rt"); 

    if(fpInpFile == NULL) 
    { 
     return -1; 
    } 

    while(sChar[lCharIndx] = fgetwc(fpInpFile)) 
    { 
     lVarLength ++; 
     lHeaderLength ++; 

     // If Variable name is too long, or if the length of the header is too long, throw an error 
     if(lVarLength >= 100 || lHeaderLength >= 100) 
     {     
      fclose(fpInpFile); 
      return -1; 
     } 

     // Resetting varibale length before reading length of next variable 
     if(sChar[lCharIndx] == ',') 
      lVarLength = 0; 

     // Header reading is done, so exiting the loop 
     if(sChar[lCharIndx] == '\n') 
      break; 

     lCharIndx ++; 
    } 

    fclose(fpInpFile); 

답변

1
while(sChar[lCharIndx] = fgetwc(fpInpFile)) 

당신은 파일의 끝이 방법을 확인 should't. 대신 :

wint_t wch; 
while ((wch = fgetwc(fpInpFile)) != WEOF) 
{ 
    sChar[lCharIndx] = wch; 

또한, 당신이 lCharIndxsChar 또는하지의 배열 크기 내에 있는지 여부를 확인해야합니다.

+0

yah. 당신이 올바른지. 나는 파일 검사의 끝을 완전히 잊었다. 지적 해 주셔서 고마워요. lCharIndx는 lCharIndx가 항상 sChar (100)의 배열 크기를 유지하는지 확인하기 때문에 lHeaderLength> = 100으로 문제가되지 않습니다. 그러나 편집 된 파일의 확장에 대한 내 원래의 문제는 다루지 않습니다. 저 역시 저를 도와 주실 수 있습니까? 다시 한번 감사드립니다. – sudiptaasi

+0

@sudiptaasi 도움을 주셔서 감사합니다. – timrau

+0

파일 형식을 지원할 수 없다는 것을 알게되면 오류를 찾아 내야합니다. 문제가 해결되었습니다. 고마워. – sudiptaasi