Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
#1

Чтение из файла - C++

15.09.2009, 10:44. Просмотров 3155. Ответов 23
Метки нет (Все метки)

Доброго всем дня!
Опишу свою проблему - есть файл с библиотекой данных (размером аж 142 082 049 байт), в одном байте которой хранится 2 значения от 0 до 9 в определенном порядке (ну это не суть важно). Надо эту библиотеку считать из файла в память, чтобы каждое значение было помещено в массив unsigned short int(потому как значения не превышают 9-ти).
Делаю я это следующим образом:
C++
1
2
3
4
5
6
cout<<"1. Чтение библиотеки функций от 5-ти переменных"<<endl;
ifstream fin1("5v_lib2",ios_base::binary);
unsigned fs1=142082049;
char *lib_main=new char[fs1];
fin1.read(lib_main,fs1);
fin1.close();
т.е. считываю весь файл в массив char, т.е. в одном байте не может быть значений больше двух девяток, что в десятичной системе значит 153, но проверка

C++
1
2
3
4
for (int i=0; i<142082049; i++) {if((unsigned short int) lib_main[i]>160){
    cout << (unsigned short int)lib_main[i] << " " <<  i << endl;
    break;}
}
вылетает на 1258987-итерации со значением 65415, хотя вообще не должна, саму библиотеку смотрел HEX-Редактором - все нормально, больших чисел нет, да и быть не может.
Даже не могу сообразить в какую сторону копать...подскажите, плиз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2009, 10:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла (C++):

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение из файла. Повторное чтение файла - C++
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае некорректного ввода их в оный. Вот...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

Чтение файла с несколькими знаками конца файла - C++
В файле несколько раз встречается ноль, и ни как не получается прочитать его полностью. Как можно решить данную проблему ?

23
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2009, 18:02 #16
Цитата Сообщение от АНК Посмотреть сообщение
C++
1
ifstream ( const char * filename, ios_base::openmode mode = ios_base::in );
файл открывается по умолчанию только на чтение.
а теперь читаем внимательнее
Цитата Сообщение от M128K145 Посмотреть сообщение
Он просто однонаправленный и хоть по умолчанию, хоть нет, он всегда будет только для чтения.
Он не по умолчанию открывается на чтение, он всегда открывается только для чтения
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.09.2009, 18:03 #17
Цитата Сообщение от АНК Посмотреть сообщение
Нет там openmode mode=ios_base::binary
C++
1
2
3
4
5
explicit basic_fstream(
    const char *_Filename,
    ios_base::openmode _Mode = ios_base::in | ios_base::out,
    int _Prot = (int)ios_base::_Openprot
);
0
АНК
124 / 115 / 2
Регистрация: 27.02.2007
Сообщений: 291
15.09.2009, 18:21 #18
zim22, Это все прекрасно. Смотрим тут
C++
1
2
3
basic_fstream();
explicit basic_fstream  ( const char * filename, 
   ios_base::openmode mode = ios_base::in | ios_base::out);
Добавлено через 8 минут
Цитата Сообщение от M128K145 Посмотреть сообщение
Он не по умолчанию открывается на чтение, он всегда открывается только для чтения
А если открыть файл с явно указанным openmode mode? На пример:
C++
1
ifstream (filename, ios_base::out );
Что произойдет по Вашему?
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2009, 18:48 #19
АНК, приведи мне пример такой реализации
C++
1
ifstream ifs(filename, ios_base::out);
для записи в файл или
C++
1
ofstream ofs(filename, ios_base::in);
для чтения из файла. Если ты напишеш это, я извинюсь и скажу, что был не прав
0
АНК
124 / 115 / 2
Регистрация: 27.02.2007
Сообщений: 291
15.09.2009, 19:57 #20
Цитата Сообщение от M128K145 Посмотреть сообщение
АНК, приведи мне пример такой реализации
Пожалуйста, только сейчас проверял
C++
1
2
3
4
5
6
7
8
9
10
11
12
  char bf[600] = {0};
  ifstream *filestr = new ifstream("asd.txt", ios_base::out|ios_base::binary);
  try {
    filestr->read(bf, 550);
    bf[0] = 0;
    filestr->seekg(0, ios::beg);
    ((ofstream*)filestr)->write(bf, 10);
  }
  __finally {
    filestr->close();
    delete filestr;
  }
Но это, естественно, извращение, так что извиняться не надо. Просто принципиально такая возможность есть...

Добавлено через 24 минуты
zim22, эксперимент показал, что
C++
1
fstream *filestr = new fstream("asd.txt");
открывает файл в режиме "текст"
1
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2009, 20:32 #21
АНК, могу согласится, что да, ты записал в файл текст, извини, не учел приведение типов. Но вот повтори это же самое для потока чисто класса ifstream, без приведения к ofstream
0
АНК
124 / 115 / 2
Регистрация: 27.02.2007
Сообщений: 291
15.09.2009, 20:54 #22
Цитата Сообщение от M128K145 Посмотреть сообщение
для потока чисто класса ifstream, без приведения к ofstream
А не получится ничего. В классе ifstream нет метода write(...). Как и в классе ofstream нет метода read(...).
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2009, 21:02 #23
АНК, то-то же. Вот о чем я тебе и пытался тогда сказать! Невозможно ифстримом записать(как и остримом считать) что-либо в файл. В чем ты собственно и убедился на практике
0
kravam
быдлокодер
1702 / 889 / 45
Регистрация: 04.06.2008
Сообщений: 5,499
28.02.2013, 22:10 #24
То же что и здесь попроще только:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
using namespace std;
 
 
int main () {
    ifstream *filestr = new ifstream("asd.txt", ios_base::out|ios_base::binary);
    char bf_[11] = "kkkkkkkkkk";
    ((ofstream*)filestr)->write(bf_, 10);
    filestr->close();
    delete filestr;
    getchar ();
    return 0;
}
...а вообще это только фокусы показывать разве что.
0
28.02.2013, 22:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2013, 22:10
Привет! Вот еще темы с ответами:

Чтение из файла - C++
Ответьте на вопросы (только не мудрено) 1. Перечислите функции для открытия файла, закрытия файла, чтения данных из файла. 2. Как...

Чтение файла - C++
Знаю, что очень ламерский вопрос... Вот только нихрена не получается! Я и так и сяк вертел... Вобщем, есть файл .txt с записями вида ...

Чтение из файла - C++
Всем привет! Есть одна небольшая проблема. Существует файл input.txt в котором два числа 3 и 5. Вот код: #include&lt;iostream&gt; ...

Чтение файла - C++
Добрый день) Прошу помощи по поводу чтения файла. По сути: к примеру есть файл txt и в нем данные. Вопрос: как вывести эти данные на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru