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

C

Christopher Reeve

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;
}
==============================================================
 
K

Kevin Goodsell

Christopher said:
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 said:
#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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top