Re: Reading Large file
Hi!
I wonder, why there is no answer in the last weeks. I just stumbled over
this thread.
smilesonisamal@gmail.com schrieb:
Hi,
I am reading each character one at a time.The file is a ascii
file... Each octet is read into a buffer..Could you please suggest
some better method?
Instead of reading one character at a time, you can use the "read"
procedure to read any number of characters at a time. Since you have a a
fixed record length, this length is a good candidate for the reading length.
Reading a file using the C++ standard iostreams:
#include <vector>
#include <istream> //for reading
#include <iostream> //console streams, cout
#include <fstream> //for files
#include <stdexcept> //some exceptions, runtime_error
static const size_t RECORD_SIZE = 100; //fixed size record length
typedef std::vector<char> RecordBuffer; //array of char
void handleRecord(RecordBuffer const& buffer)
{
// .. whatever ..
// access to chars via buffer.at(index)
std::cout << "read one record\n";
}
void readRecord(std::istream& stream, RecordBuffer& buffer)
{
buffer.resize(RECORD_SIZE);
stream.read(&buffer.front(), RECORD_SIZE);
}
void readAndHandleFile(const char* const filename)
{
std::ifstream file(filename);
if( ! file)
throw std::runtime_error("could not open file");
while(true)
{
RecordBuffer buffer;
readRecord(file, buffer);
if( ! file)
break;
handleRecord(buffer);
}
file.close();
}
int main(int argc, char* argv[])
{
try
{
if(argc>1)
readAndHandleFile(argv[1]);
return 0; //0 means successful execution
}
catch(std::exception const& e)
{
std::cout << "ERROR: " << e.what() << '\n';
}
catch(...)
{
std::cout << "UNKNOWN ERROR\n";
}
return -1; //signal error
}
HTH,
Frank
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]