
Question:
I think I probably have to use an fstream object but i'm not sure how. Essentially I want to read in a file into a byte buffer, modify it, then rewrite these bytes to a file. So I just need to know how to do byte i/o.
Solution:1
#include <fstream> ifstream fileBuffer("input file path", ios::in|ios::binary); ofstream outputBuffer("output file path", ios::out|ios::binary); char input[1024]; char output[1024]; if (fileBuffer.is_open()) { fileBuffer.seekg(0, ios::beg); fileBuffer.getline(input, 1024); } // Modify output here. outputBuffer.write(output, sizeof(output)); outputBuffer.close(); fileBuffer.close();
From memory I think this is how it goes.
Solution:2
If you are dealing with a small file size, I recommend that reading the whole file is easier. Then work with the buffer and write the whole block out again. These show you how to read the block - assuming you fill in the open input/output file from above reply
// open the file stream ..... // use seek to find the length, the you can create a buffer of that size input.seekg (0, ios::end); int length = input.tellg(); input.seekg (0, ios::beg); buffer = new char [length]; input.read (buffer,length); // do something with the buffer here ............ // write it back out, assuming you now have allocated a new buffer output.write(newBuffer, sizeof(newBuffer)); delete buffer; delete newBuffer; // close the file ..........
Solution:3
While doing file I/O, you will have to read the file in a loop checking for end of file and error conditions. You can use the above code like this
while (fileBufferHere.good()) { filebufferHere.getline(m_content, 1024) /* Do your work */ }
Solution:4
#include <iostream> #include <fstream> const static int BUF_SIZE = 4096; using std::ios_base; int main(int argc, char** argv) { std::ifstream in(argv[1], ios_base::in | ios_base::binary); // Use binary mode so we can std::ofstream out(argv[2], // handle all kinds of file ios_base::out | ios_base::binary); // content. // Make sure the streams opened okay... char buf[BUF_SIZE]; do { in.read(&buf[0], BUF_SIZE); // Read at most n bytes into out.write(&buf[0], in.gcount()); // buf, then write the buf to } while (in.gcount() > 0); // the output. // Check streams for problems... in.close(); out.close(); }
Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
EmoticonEmoticon