2010-05-05 88 views
0

我已经插手了一些代码,但我无法正确读取整个文件...很多垃圾被附加到输出。我该如何解决?MFC:读取整个文件缓冲

// wmfParser.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include "wmfParser.h" 
#include <cstring> 

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 


// The one and only application object 

CWinApp theApp; 

using namespace std; 

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) 
{ 
    int nRetCode = 0; 

    // initialize MFC and print and error on failure 
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) 
    { 
     // TODO: change error code to suit your needs 
     _tprintf(_T("Fatal Error: MFC initialization failed\n")); 
     nRetCode = 1; 
    } 
    else 
    { 
     // TODO: code your application's behavior here. 
     CFile file; 
     CFileException exp; 
     if(!file.Open(_T("c:\\sample.txt"), CFile::modeRead, &exp)){    
      exp.ReportError(); 
      cout<<'\n';   
      cout<<"Aborting..."; 
      system("pause"); 
      return 0; 
     } 

     ULONGLONG dwLength = file.GetLength(); 
     cout<<"Length of file to read = " << dwLength << '\n'; 
     /* 
     BYTE* buffer; 
     buffer=(BYTE*)calloc(dwLength, sizeof(BYTE)); 
     file.Read(buffer, 25); 
     char* str = (char*)buffer;  
     cout<<"length of string : " << strlen(str) << '\n';  
     cout<<"string from file: " << str << '\n'; 
     */ 

     char str[100]; 

     file.Read(str, sizeof(str)); 
     cout << "Data : " << str <<'\n'; 
     file.Close(); 
     cout<<"File was closed\n"; 

     //AfxMessageBox(_T("This is a test message box")); 
     system("pause"); 
    } 
    return nRetCode; 
} 

UPDATE: 专门找指导,对于注释掉的代码......也想听听其他建议太...

回答

0

您的字符串不是空终止。您需要初始化字符串strmemset(str,0, sizeof(str));

+0

http://paste.bradleygill.com/index.php?paste_id=33780 >这不起作用... – deostroll 2010-05-05 06:06:44

0

我认为这可能是更接近你正在寻找:

/* first method */ 

    ULONGLONG dwLength = file.GetLength(); 
    cout << "Length of file to read = " << dwLength << '\n'; 

    // make room for whole file, plus null 
    BYTE *buffer = (BYTE *) malloc(dwLength + 1); 

    file.Read(buffer, dwLength); // read whole file 
    *(buffer + dwLength) = '\0'; // add null 

    cout << "length of string : " << strlen(buffer) << '\n';  
    cout << "string from file: " << buffer << '\n'; 

    free(buffer); 

    file.SeekToBegin(); // Back to the beginning 

    /* second method */ 
    char str[dwLength + 1]; 

    file.Read(str, dwLength + 1); 
    str[dwLength] = '\0'; 

    cout << "Data : " << str <<'\n'; 
    file.Close(); 

    cout << "File was closed\n";