Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как считать файл по 1 байту


Автор: catherham 23.2.2011, 22:15
Нужно считать файл по 1 байту. Т.е сначала 1-й байт, потом 2-й и так до конца файла.

Автор: triclosan 23.2.2011, 22:20
istream::get ?

Автор: alexvs11 23.2.2011, 22:25
Код

ifstream f( "c:/1.txt" );
if( !f ){
  return -1;
}
char c;
f.read( &c, 1 );
f.read( &c, 1 );
f.read( &c, 1 );
f.read( &c, 1 );
...


Добавлено через 2 минуты и 47 секунд
Код

ifstream f( "c:/1.txt" );
if( !f ){
  return -1;
}
char c;
f.read( &c, 1 );

Автор: catherham 23.2.2011, 23:38
alexvs11,  А таким образом можно окрыть файл любого типа, а то мне нужно посчитать кол-во байт в файле, для txt работает, а для jpg или docx нет. Пишет неверное кол-во байт. Для хранения кол-ва байт использую тип unsigned int, docx файл весит 163 тыс. байт.

Автор: alexvs11 23.2.2011, 23:49
ios_base::binary же

Автор: catherham 23.2.2011, 23:52
спасибо) открыл как бинарный)) всё круто считает)

Автор: Nat 24.2.2011, 09:30
Если нужно просто узнать размер файла, то можно использовать структуру stat.
Код

#include <sys\stat.h>

              struct stat     statbuf;
    int           file_size;
    fstream in( FName, ios_base::in | ios_base::binary );
    if( !in.good() )
    {
        throw runtime_error( "Can't open data file." );
        return file_size = -1;
    }
    stat( FName, &statbuf );
    file_size = statbuf.st_size;
    in.read( send_buf , file_size );
    in.close();


Автор: alexvs11 24.2.2011, 11:31
Nat, ну есть стандартный способ узнать через 
Код

  f.seekg (0, ios::end);
  length = f.tellg();
  f.seekg (0, ios::beg);


Автор: catherham 24.2.2011, 13:07
Мне нужно было посчитать кол-во повторений каждого байта и число всех байтов. Уже сделал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)