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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
nemecfc
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
#1

Непонятки с fread - C++

12.05.2011, 18:46. Просмотров 2424. Ответов 11
Метки нет (Все метки)

Добрый день. Столкнулся с такой проблемой: читаю обычный текстовый файл, однако помимо его содержания мне выдает еще ==**** в конце (причем количество = равно количеству переносов строк).
Делал и с fread(), и через file.read(), все равно та же проблема.

Код функций для чтения:
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
char *memblock;
 
string fileread(ifstream& file)
{
file.seekg (0, ios::beg);
int beg=file.tellg();
file.seekg (0, ios::end);
int end=file.tellg();
int size=end-beg;
file.seekg (0, ios::beg);
memblock=new char[size];
file.read(memblock,size);
return(string(memblock));
}
 
 
string fileread1(FILE* file)
{
fseek(file,0,SEEK_END);
int lSize = ftell(file);
rewind(file);
char* buffer;
buffer=new char[lSize];
fread(buffer,1,lSize,file);
return(string(buffer));
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2011, 18:46     Непонятки с fread
Посмотрите здесь:

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

Fread и fout? - C++
Здравствуйте. Была поставлена предо мной задача: Сделать структуру, которая через меню будет выполнять некоторые действия с файлами....

fseek / fread - C++
Всем привет! Такой вопрос возник. Есть строка, состоящая из нескольких "записей" в файле (буквы + числа). Нужно с помощью функций...

Поиск ошибки в fread - C++
У меня возникла ошибка. Мне нужно прочесть данные с бинарных файлов. Бинарный файл "a.dat" содержит в себе числа '7 0 1 0 1 0 1 0 2 6 2',...

Параметры функции fread - C++
Вот программа: _____________________ #include <iostream> #include <stdio.h> #include <conio.h> #include <string.h> using...

Особенности работы fread - C++
Решаю типовую задачу: считывание заголовка bmp-файла (точечного рисунка). Однако у меня ничего не получалось. В ходе расследования...

fread с непонятной ошибкой - C++
Вот фрагмент кода, который вызывает ошибку: FILE *t = fopen("squares.db","r"); if (!t) { char log;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1643 / 1271 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
12.05.2011, 21:22     Непонятки с fread #2
выделяйте память (оператором new) на единицу больше и обнуляйте её
nemecfc
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
12.05.2011, 22:27  [ТС]     Непонятки с fread #3
Спасибо за ответ. Пробовал выделять на 1 больше памяти и дописывать buffer[lSize+1]='\0';
но в конце все равно оно дописывает = (при выводе в консоль), а при записи прочитанного в файл добавляет что-то непонятное в конце. Как с этим бороться?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.05.2011, 22:37     Непонятки с fread #4
fread для бинарных файлов, почитайте чем они отличаются бинарные от текстовых и поймете откуда эти символы
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
12.05.2011, 22:38     Непонятки с fread #5
nemecfc, попробуйте файл, как бинарный открывать...

опоздал немного...
nemecfc
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
13.05.2011, 13:26  [ТС]     Непонятки с fread #6
Открываю в бинарном режиме, добавляю нулевой байт, все равно выскакивает в конце "=" при выводе на консоль, и "н" при записи повторно в файл. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
file=fopen("example.txt","rb");
string fileread(FILE* file)
{
fseek(file,0,SEEK_END);
int lSize = ftell(file);
rewind(file);
char* buffer;
buffer=new char[lSize+1];
fread(buffer,1,lSize,file);
buffer[lSize+1]='\0';
return(string(buffer));
}
Вообще не понимаю, почему столько ухищрений нужно для такой простой вещи, как прочитать файл??? В том же PHP все гораздо проще и удобнее.

Как альтернатива, может кто-то подсказать другой метод для считывания текстового файла, чтобы если я перепишу исходный файл тем, что я с него считал, он не изменился бы?
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
13.05.2011, 16:30     Непонятки с fread #7
Цитата Сообщение от nemecfc Посмотреть сообщение
buffer[lSize+1]='\0';
Выход за границу массива. Правильно
C++
1
buffer[lSize]='\0';
А вообще код мрачен. Не нужно мешать С и С++ - это разные языки программирования.
igorrr37
1643 / 1271 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
13.05.2011, 20:03     Непонятки с fread #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<string>
#include<fstream>
#include<iterator>
 
std::string FileRead(std::fstream& fs){
    std::string str((std::istreambuf_iterator<char>(fs)), std::istreambuf_iterator<char>());
    return str;
}
 
int main(){
    std::fstream fs("1.txt");
    if(!fs){std::cerr<<"File not found\n"; return -1;}
    std::string str=FileRead(fs);
    fs.close();
    fs.open("1.txt", std::ios::out);
    fs<<"new: \n"<<str;
    fs.close();
    return 0;
}
nemecfc
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
14.05.2011, 14:05  [ТС]     Непонятки с fread #9
В функции FileRead ошибки при компиляции
C++
1
2
3
4
C:\Program Files\Microsoft Visual Studio\MyProjects\ReadWrite\rw.cpp(27) : error C2061: syntax error : identifier 'fs'
C:\Program Files\Microsoft Visual Studio\MyProjects\ReadWrite\rw.cpp(27) : error C2066: cast to function type is illegal
C:\Program Files\Microsoft Visual Studio\MyProjects\ReadWrite\rw.cpp(27) : error C2059: syntax error : ','
C:\Program Files\Microsoft Visual Studio\MyProjects\ReadWrite\rw.cpp(28) : error C2065: 'str' : undeclared identifier
igorrr37
1643 / 1271 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
14.05.2011, 15:13     Непонятки с fread #10
на студии 2008 норм работает, единственное, пришлось приинклудить stdafx
nemecfc
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
14.05.2011, 22:40  [ТС]     Непонятки с fread #11
Выдает все те же ошибки(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2011, 17:12     Непонятки с fread
Еще ссылки по теме:

Функции fread() и fwrite() - C++
Меня интересует что это за &quot;счётчик&quot; в этих функциях fwrite( massiv, *size_int * sizeof(unsigned int), 1, fp); &lt;= в большинстве примеров...

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

Нужен совет fread - C++
Как считать с txt файла значения int с помощью функции fread ( не использовать ifstream и оfstream )

Аналог С функции fread и fwrite в С++ - C++
Здравствуйте, какие есть аналоги функций fread() fwrite в С++?

Функция fread не считывает данные - C++
Доброго времени суток. Столкнулся вот с проблемой не пойму в чем дело. Нужно из текстового файла считать целочисленный массив. ...


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

Или воспользуйтесь поиском по форуму:
nemecfc
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
16.05.2011, 17:12  [ТС]     Непонятки с fread #12
Работающее на VS6 решение оказалось таким:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string>
#include <stdio.h>
#include <stdlib.h>
 
string fileread(FILE* file)
{
rewind(file);
string fstr="";
char ch;
while( (ch=fgetc(file) ) != EOF)
{
    fstr=fstr+ch;
}
return(fstr);
}
Yandex
Объявления
16.05.2011, 17:12     Непонятки с fread
Ответ Создать тему
Опции темы

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