开发者

MFC: Reading entire file to buffer

开发者 https://www.devze.com 2022-12-29 19:01 出处:网络
I\'ve meddled with some code but I am unable to read the entire file properly...a lot of junk gets appended to the output. How do I fix this?

I've meddled with some code but I am unable to read the entire file properly...a lot of junk gets appended to the output. How do I fix this?

// 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();
  开发者_Python百科          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: specifically looking for guidance with respect to the commented code...will also like to hear other suggestions too...


Your string is not NULL terminated. You need to initialize the string str with memset(str,0, sizeof(str));


I think this might be closer to what you're looking for:

    /* 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";
0

精彩评论

暂无评论...
验证码 换一张
取 消