469,632 Members | 1,637 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,632 developers. It's quick & easy.

HELP! using filehandle.get("filename") writes to file when it reads!?

Hi, I wonder if anyone could help me. I am moving accross from C to
C++ and am writing a program that reads and writes data into a file. I
am aware of the old C ways of doing it but am trying to use the C++
functions which don't seem to be working propperly.

I need to open the file for reading and writing because I want to
search for a possition in a file called settings.dat and then write a
number after a certain chatacter. However when I use
examplefile.get(buffer,100); or examplefile.getline(buffer,100), in
addition to reading to the file it also modifies it by inserting the
first three characters of what ot read back into the place it started
reading from. Does anyone know why this might be happening or how I
can get arround this? I am using Dev-C++.
I'll give this test program as an example, it requires any old file
called settings.dat

================================================
#include <iostream>
#include <fstream>


#define FSETTINGS "settings.dat"

using namespace std;

int main () {
char buffer[256];
//fstream examplefile;
fstream examplefile (FSETTINGS);
//examplefile.seekg(9,ios::cur);
examplefile.get (buffer,100);
cout << buffer << endl;

system ("PAUSE");
return 0;
}
================================================== ============
Jul 19 '05 #1
1 3806
Christopher Reeve wrote:
Hi, I wonder if anyone could help me. I am moving accross from C to
C++ and am writing a program that reads and writes data into a file. I
am aware of the old C ways of doing it but am trying to use the C++
functions which don't seem to be working propperly.

I need to open the file for reading and writing because I want to
search for a possition in a file called settings.dat and then write a
number after a certain chatacter. However when I use
examplefile.get(buffer,100); or examplefile.getline(buffer,100), in
addition to reading to the file it also modifies it by inserting the
first three characters of what ot read back into the place it started
reading from.
I don't understand what you said. But neither of those functions should
write to the file.
Does anyone know why this might be happening or how I
can get arround this? I am using Dev-C++.
I'll give this test program as an example, it requires any old file
called settings.dat

================================================
#include <iostream>
#include <fstream>
I suggest adding <string>

#define FSETTINGS "settings.dat"
It would be better if you used

const char *const fsettings = "settings.dat";

I changed the case because it is no longer a macro.

using namespace std;

int main () {
char buffer[256];
I suggest making this

string buffer;
//fstream examplefile;
fstream examplefile (FSETTINGS);
//examplefile.seekg(9,ios::cur);
examplefile.get (buffer,100);
I suggest using

getline(examplefile, buffer);

Where buffer is a string. Note that this is not exactly the same,
because it extracts the newline character from the stream (and discards
it) rather than leaving it there.
cout << buffer << endl;

system ("PAUSE");
return 0;
}
================================================== ============


I can't see an obvious reason for any serious problems. Your code worked
for me. You might need to give us more information, and the contents of
the input file you used for testing.

-Kevin
--
My email address is valid, but changes periodically.
To contact me please use the address from a recent posting.

Jul 19 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

7 posts views Thread by Kornelius Finkenbein | last post: by
1 post views Thread by Sameh Abdelatef | last post: by
2 posts views Thread by George Marsaglia | last post: by
reply views Thread by Rob Meade | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.