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";
精彩评论