Can anyone show me how to read an entire text fine into a Cstring?

I am trying to read a file that contains xml that is required for a function I am using.  The xml needs to be passed to the function as a CSTRING.

LVL 9
JonMnyAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
You could e.g.

CString strXml;
CFile file("test.xml",CFile::modeRead);

DWORD dwLen = file.GetLength();

char* pBuf = new char[dwLen + 1];

file.Read(buf,dwLen);

pBuf[dwLen + 1] = '\0';

strXml = pBuf;

delete[] pBuf;

Then, you will have the whole file in strXml.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
RyallaCommented:

#include <stdio.h> // contains file i/o declarations
#include <malloc.h> // contains malloc's declaration
 
 
...
FILE* f; // pointer to a file
long fsize; // long that will contain file size
 
f = fopen("myfile.xml", "rb"); // opens the file "./myfile.xml" for reading in binary mode
 
fseek(f , 0 , SEEK_END); // goes to the end of the file
fsize = ftell(f); // tells length of file from start to current position (end)
rewind(f); // goes to the start of the file
 
char* cstr = malloc(sizeof(char) * fsize); // allocates memory for a c string equal to the length of the file
 
fread(cstr, 1, fsize, f); // reads the entire file into cstr
 
fclose(f); // closes file
...

Open in new window

0
Deepu AbrahamR & D Engineering ManagerCommented:

Rather than using CString I would recommend some thing like this,
This link may be of some help:
http://www.codeproject.com/vcpp/stl/simple_xmlwriter.asp
Best Regards,
DeepuAbrahamK
0
Exploring SharePoint 2016

Explore SharePoint 2016, the web-based, collaborative platform that integrates with Microsoft Office to provide intranets, secure document management, and collaboration so you can develop your online and offline capabilities.

Jaime OlivaresSoftware ArchitectCommented:
0
JonMnyAuthor Commented:
Thanks for the fast response!
0
rstaveleyCommented:
Converting from std::string is a snip, and the following readFile template function is something that I like to use to load standard library char containers like std::string with file contents.
#include "atlstr.h"
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
#include <vector>
 
template <typename T>
T readFile(const std::string& filename)
{
	typedef std::istreambuf_iterator<char> Citr;
	std::ifstream fin(filename.c_str(),std::ios::binary | std::ios::in);
	return T(Citr(fin),Citr());
}
 
int main()
{
	using std::string;
	CString str = readFile<string>("x.cpp").c_str();
	std::cout << str;
}

Open in new window

0
rstaveleyCommented:
Looks like my code snippet was pre-empted. Here it is the old fashioned way, if anyone cares...

#include "atlstr.h"
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
#include <vector>

template <typename T>
T readFile(const std::string& filename)
{
      typedef std::istreambuf_iterator<char> Citr;
      std::ifstream fin(filename.c_str(),std::ios::binary | std::ios::in);
      return T(Citr(fin),Citr());
}

int main()
{
      using std::string;
      CString str = readFile<string>("x.cpp").c_str();
      std::cout << str;
}
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.