Solved

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

Posted on 2007-11-20
7
511 Views
Last Modified: 2013-11-20
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.

0
Comment
Question by:JonMny
7 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 20320004
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
 
LVL 1

Expert Comment

by:Ryalla
ID: 20320116

#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
 
LVL 11

Expert Comment

by:DeepuAbrahamK
ID: 20320167

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
Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20320395
0
 
LVL 9

Author Closing Comment

by:JonMny
ID: 31410123
Thanks for the fast response!
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 20321015
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
 
LVL 17

Expert Comment

by:rstaveley
ID: 20321037
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

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
sumHeights2  challenge 7 117
Printing the elements of a set declared inside a map in C++. 3 53
JQuery serialize and unserialize 8 138
What is sub-make ? 2 71
Introduction: Hints for the grid button.  Nested classes, templated collections.  Squash that darned bug! Continuing from the sixth article about sudoku.   Open the project in visual studio. First we will finish with the SUD_SETVALUE messa…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question