Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
11.09.2012, 13:40     Чтение из файла read и rdbuf #1
Всем доброго дня!

Не могу понять почему при использовании функции read() появляются какие-то кракозябры, хотя при использовании rdbuf() все отрабатывается нормально. Скрин выполнения программы во вложении. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
#include<fstream>
#include<windows.h>
using namespace std;
 
int main(int argc, char* argv[])
{
    int length;
    char* buffer;
 
    cout << endl;
    Sleep(500);
 
    cout << "Source filename is: " << argv[1] << endl ;     // source filename
    Sleep(500);
 
    ifstream srcfile;
    srcfile.open(argv[1]);
    srcfile.seekg (0, ios::end);
    length = srcfile.tellg();
    
    srcfile.seekg (0, ios::beg);
    buffer = new char [length];
    srcfile.read(buffer, length);       // using "read" function
    cout << buffer << endl;
    Sleep(500);
 
    srcfile.seekg (0, ios::beg);
    cout << srcfile.rdbuf() << endl;    // using "rdbuf" function
    Sleep(500);
    
    return 0;
}
Миниатюры
Чтение из файла read и rdbuf  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
11.09.2012, 14:29     Чтение из файла read и rdbuf #2
Notice that this is an unformatted input function and what is extracted is not stored as a c-string format, therefore no ending null-character is appended at the end of the character sequence.
http://www.cplusplus.com/reference/i.../istream/read/
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
11.09.2012, 14:55  [ТС]     Чтение из файла read и rdbuf #3
Solver with Igor's advice

Add a string afrer the string with read():
C++
1
buffer[length] = '\0';
Добавлено через 11 минут
Интересная картина получается. Если добавить вторую строку в текстовый файл srcfile.txt, то при выводе на экран в конце второй строки появится символ "=". И строку
C++
1
buffer[length] = '\0';
нужно править на
C++
1
buffer[length - 1] = '\0';
При добавлении третей строки в файл в конце третьей строки опять появится символ "=", и в коде опять надо будет поправить
C++
1
buffer[length - 2] = '\0';
Что за странная зависимость? Как это работает, подскажите плз.
Elboy
131 / 112 / 4
Регистрация: 01.09.2012
Сообщений: 288
11.09.2012, 15:28     Чтение из файла read и rdbuf #4
В неинициированном буфере частенько лежит мусор. Польузйтесь функцией memset перед тем, как начинать работать с буфером.

C
1
memset (buf, 0, sizeof (buf));
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
11.09.2012, 15:58     Чтение из файла read и rdbuf #5
для read и seekg файл надо открывать как бинарный
srcfile.open(argv[1], std::ios::binary);
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
11.09.2012, 16:02  [ТС]     Чтение из файла read и rdbuf #6
Попробовал, все равно то же самое.. Еще идеи?
Или вообще, как вы читаете текстовые файлы в строку для вывода на экран?

Добавлено через 2 минуты
Получилось открывая ios::binary + в конце buffer[length] = '\0';
Всем спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 16:10     Чтение из файла read и rdbuf
Еще ссылки по теме:

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. C++
Чтение файла с несколькими знаками конца файла C++
C++ Чтение из файла

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

Или воспользуйтесь поиском по форуму:
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
11.09.2012, 16:10     Чтение из файла read и rdbuf #7
Это для бинарных файлов, текстовые в строку читаются через srcfile.getline(buffer, sizeof(buffer));
Yandex
Объявления
11.09.2012, 16:10     Чтение из файла read и rdbuf
Ответ Создать тему
Опции темы

Текущее время: 01:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru