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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 5.00
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
#1

Как правильно открыть файл и считать из него строку? - C++

08.09.2011, 11:52. Просмотров 5670. Ответов 40
Метки нет (Все метки)

Прювет!
подскажите пажалста, как правильно открыть и считать строку из файла.
весь функционал по обработке уже написал, а тут застрял как внебрачный ребенок буратино >_<

C++
1
2
3
4
5
6
7
8
9
10
11
12
    std::ifstream file("C:\\interface.txt");
    std::string lines;
 
    if(file.is_open()){
            std::string buff;
            while( !file.eof()){
                    std::getline(file, buff);
                    lines += buff + '\n';
            } file.close();
            std::cout << lines << std::endl;
    } else
            std::cerr << "Error open file!\n";
ошибка: variable 'std::ifstream file' has initializer but incomplete type
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2011, 11:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно открыть файл и считать из него строку? (C++):

Открыть файл и записать в него строку - C++
Здравствуйте! Подскажите пожалуйста почему вылетает такая ошибка, когда запускаю в visual studio? #include &quot;stdafx.h&quot; #include...

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

Как при помощи ф-ий read/write записать в файл, а потом считать с него - C++
Такой вопрос! Как при помощи ф-ий read/write записать в файл, а потом считать с него различные типы данных, как int,double, char, char. ...

Как правильно считать и записать в файл - C++
Вот такие вот классы, как правильно записать, а затем считать из файла class Base { public: Base(string s=&quot;&quot;):name(s){} virtual...

Как правильно считать побайтово файл в массив - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; #include &lt;time.h&gt; #include &lt;string&gt; using namespace std; int...

Как правильно открывать файл и записывать/читать из него - C++
Как правильно открывать файл и записывать/читать из него? На разных сайтах и учебниках есть различные примеры етого но везде разные ...

40
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 12:46 #16
talis, как я понял прикол был именно string использовать
0
talis
792 / 544 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 12:48 #17
-=ЮрА=-, ну вы же видите, подошло человеку. К тому же под string переписать - это не такая большая проблема
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 12:54 #18
Цитата Сообщение от talis Посмотреть сообщение
К тому же под string переписать - это не такая большая проблема
Нельзя стринг использовать. Там оператор + уже перегружен. И наследовать от него низя.
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 12:59 #19
Цитата Сообщение от Deviaphan Посмотреть сообщение
Нельзя стринг использовать. Там оператор + уже перегружен. И наследовать от него низя.
- это да, но считать в буфер а затем отдать строке можно

co6ak, вот твой код всего с 1-м дополнением
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.h>
#include <cstring>
#include <conio.h>
 
using std::string;
 
int main()
{
    string lines;
    string buff;
 
    char s[256];
 
    ifstream file("test.txt");
    if(file.is_open())
    {
        while(!file.eof())
        {
            file>>s;
            buff = s;
            lines += buff;
            lines += "\r\n";
        } 
    }
    else
        std::cerr << "Error open file!\n";
    std::cout<<"ReadStrings\r\n";
    std::cout <<lines.c_str() << "\r\n";
    std::cout<<"Press any key to continue";
    getch();
    return 0;
}
0
Миниатюры
Как правильно открыть файл и считать из него строку?  
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:01 #20
Цитата Сообщение от talis Посмотреть сообщение
-=ЮрА=-, ну вы же видите, подошло человеку. К тому же под string переписать - это не такая большая проблема
- но не автору ТС
0
talis
792 / 544 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 13:02 #21
-=ЮрА=-, отследите топик, это уже другой вопрос. Просто Lupus его тут разместил.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 13:03 #22
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
вот твой код всего с 1-м дополнением
Возможно переполнение, если длина слова больше 255. И почему бы сразу в buff не читать.
0
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
09.09.2011, 13:07  [ТС] #23
дополнений два.
вышибает из-за переполнения буфера на середине.

уже была получена стабильная рабочая схема действий ))

всего-то в цикле условие изменено (while (std::getline(buf, src)) { ... } ).
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:09 #24
Цитата Сообщение от Deviaphan Посмотреть сообщение
И почему бы сразу в buff не читать.
- компилятор старенький и даже так не хочет преобразовывать в read(buff.c_str()

Цитата Сообщение от Deviaphan Посмотреть сообщение
Возможно переполнение, если длина слова больше 255
слово не может иметь столько символов, разрыв всегда найдётся, но в общем случае да возможен такой вариант (хотя и маловероятен для файлов из реальной жизни)
0
talis
792 / 544 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 13:10 #25
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
даже так не хочет преобразовывать в read(buff.c_str()
-=ЮрА=-, вы пытаетесь читать типа

C++
1
2
string buff;
cin >> buff.c_str();
?
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:12 #26
Цитата Сообщение от co6ak Посмотреть сообщение
всего-то в цикле условие изменено (while (std::getline(buf, src)) { ... } )
- принял к сведению
Цитата Сообщение от co6ak Посмотреть сообщение
вышибает из-за переполнения буфера на середине.
- наверное в lines больше возможно записываем?
0
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
09.09.2011, 13:12  [ТС] #27
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- компилятор старенький и даже так не хочет преобразовывать в read(buff.c_str()

слово не может иметь столько символов, разрыв всегда найдётся, но в общем случае да возможен такой вариант (хотя и маловероятен для файлов из реальной жизни)

это в текстах.

а вот идет огромный шифрованный текст монолитом ) чо тогда)

имхо, делать динамический буфер и читать всю строку.
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:19 #28
Цитата Сообщение от co6ak Посмотреть сообщение
всего-то в цикле условие изменено (while (std::getline(buf, src)) { ... } )
- принял к сведению
Цитата Сообщение от co6ak Посмотреть сообщение
вышибает из-за переполнения буфера на середине.
- наверное в lines больше возможно записываем?

Добавлено через 5 минут
Цитата Сообщение от co6ak Посмотреть сообщение
имхо, делать динамический буфер и читать всю строку.
C++
1
2
3
4
5
6
7
8
9
10
char * str = malloc(sizeof(char));
 
FILE * f = fopen("Path","rb+");
fseek(f,0,SEEK_END);
long fLen = ftell(f);
fseek(f,0,SEEK_SET);
str = (char *)realloc(str,(1 + fLen)*sizeof(char));
fread(str,fLen,1,f);
fclose(f)
str[fLen] = '\0';
Лично мной проверено на файле 108 Мб, но думаю и больше можно, только долго считывание будет идти...
0
talis
792 / 544 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 13:22 #29
-=ЮрА=-, а если файл такой:

Код
а
аб 
абв
фы
акк
ваи
235
аы
456
р
и так девятьсот мегабайт

Сколько времени вы потратите на то, чтобы выделять каждый раз по четыре байта и во что вы превратите кучу?

Добавлено через 1 минуту
-=ЮрА=-, уже обе проблемы решены.
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.09.2011, 13:26 #30
Цитата Сообщение от talis Посмотреть сообщение
и так девятьсот мегабайт
- Будет ОЗУ 4 гига - налету считаю...
0
09.09.2011, 13:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2011, 13:26
Привет! Вот еще темы с ответами:

Как правильно сохранить и потом считать структуру в бинарный файл - C++
Есть структура struct card { int size; char *lear; int *name; }; Эта структура это карты игрока. Заполняем ее данными, у...

Есть файл .txt с него нужно считать информацию - C++
Есть файл .txt с него нужно считать информацию и записать в строку у меня считывает только первую строку, и записывает по всем переменным ...

Работа с файлами(открыть файл, считать данные в double массив) - C++
Доброго времени суток всем! Столкнулся с проблемой при написании проги. Вот что требуется: 1)Открыть файл 2)Считать данные в массив...

Считать весь файл в строку - C++
Делаю так: string name_of_file=&quot;abba.txt&quot;; ifstream fin(name_of_file); if(!fin.is_open()){ ...


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

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

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