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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
nemecfc
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
12.05.2011, 18:46     Непонятки с fread #1
Добрый день. Столкнулся с такой проблемой: читаю обычный текстовый файл, однако помимо его содержания мне выдает еще ==**** в конце (причем количество = равно количеству переносов строк).
Делал и с 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
Посмотрите здесь:

C++ fread
C++ fseek / fread
C++ Функция fread и матрицы
C++ fread с непонятной ошибкой
C++ Особенности работы fread
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.05.2011, 22:37     Непонятки с fread #4
fread для бинарных файлов, почитайте чем они отличаются бинарные от текстовых и поймете откуда эти символы
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.05.2011, 16:30     Непонятки с fread #7
Цитата Сообщение от nemecfc Посмотреть сообщение
buffer[lSize+1]='\0';
Выход за границу массива. Правильно
C++
1
buffer[lSize]='\0';
А вообще код мрачен. Не нужно мешать С и С++ - это разные языки программирования.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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
Еще ссылки по теме:

C++ Функции fread() и fwrite()
Поиск ошибки в fread C++
Нужен совет 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
Ответ Создать тему
Опции темы

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