Re: copy the last n-bytes of a big file into another file
tirzan wrote:
I would like to copy a the last part of a (quite big) file into
another one (remove the header of few big images, basically remove the
first 1024 bytes).
I'm driving crazy, can you please help me?
Will try...
This one of the attempts (but it just copies the file, how can I tell
to start copying from a certain position?):
std::fstream f(inputFileName, std::fstream::in|
std::fstream::binary);
Try to avoid one-letter variables. Hard to understand what they are for
when looking at them later in the code.
std::istream_iterator<unsigned char> begin(f.seekg(1024,
std::ios::beg));
'fstream' is of type 'basic_fstream<char>'. Do you really want to
change the type to 'unsigned char' here? You'd be better off using the
same template argument, no? How does it compile, anyway?
And, 'seekg' returns the stream. You're constructing an iterator from
the stream. Are you sure your iterator isn't going to reset the stream?
Why don't you just do
std::istream_iterator<char> begin(f);
std::advance(begin, 1024); // skip the first 1024 bytes
f << std::noskipws;
Now, what does that do for a *binary* input file?
std::istream_iterator<unsigned char> end;
Again, use <char> .
std::fstream f2(outputFileName, std::fstream::out|
std::fstream::trunc| std::fstream::binary);
std::ostream_iterator<char> begin2(f2);
std::copy(begin, end, begin2);
So, to summarize: be simpler and more explicit. And post the final
(hopefully short) program. We could try it with a file longer than 1024
characters.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask