user1220165
user1220165

Reputation: 23

I'm trying to set up a file stream or something like that, but I'm very confused as to what I'm supposed to do

#include <iostream>
#include <fstream>

int main() {
    std::ofstream outfile("text.txt", ios::trunc);
    std::ifstream infile("text.txt", ios::trunc);

    outfile.seekp(0);

    std::cout << "This is a file";

    infile.seekg(0, ios::end);
    int length = infile.tellg();
    infile.read(0, length);

    infile.close();
    outfile.close();
    return 0;
}

I think I get the idea behind this, but I feel like (and I'm pretty sure) I have no idea what I'm doing. I've looked it up and everything has confused me. I've read through a C++ reference, and then I googled it, but I still don't understand what I'm doing wrong.

#include <iostream>
#include <fstream>
#include <cstring>

int main() {
    std::fstream file("text.txt", std::ios_base::in | std::ios_base::out);

    file << "This is a file";
    int length = file.tellg();

    std::string uberstring;
    file >> uberstring;
    std::cout << uberstring;

    char *buffer = new char[length + 1];
    file.read(buffer, length);
    buffer[length] = '\0';

    file.close();
    delete [] buffer;

    return 0;
}

I tried this, but it isn't printing anything. Why isn't this working?

Upvotes: 1

Views: 140

Answers (1)

Jason
Jason

Reputation: 32540

If you want to read and write to the same file, just use a normal std::fstream ... there is no need to attempt and open the same file as both a ifstream and ofstream. Also if you want to write data to the file, use the operator<< on the actual fstream instance object, not std::cout ... that will simply write to wherever std::cout is set, which is typically the console. Finally, the call to read has to go back into a buffer, you can't use NULL as an argument. So your code would change to the following:

int main() 
{
    std::fstream file("text.txt", ios_base::in | ios_base::out);

    //outfile.seekp(0); <== not needed since you just opened the file

    file << "This is a file"; //<== use the std::fstream instance "file"

    //file.seekg(0, ios::end); <== not needed ... you're already at the end
    int length = file.tellg();

    //you have to read back into a buffer
    char* buffer = new char[length + 1];
    infile.read(buffer, length); 
    buffer[length] = '\0'; //<== NULL terminate the string

    file.close();
    delete [] buffer;

    return 0;
}

Upvotes: 1

Related Questions