Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
daqq
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 14
1

Чтение файла

02.02.2012, 22:22. Просмотров 1314. Ответов 23
Метки нет (Все метки)

Вообщем проблема заключается в том, что при чтении файла и вывод его в консоль, само чтение файла до конца не доходит.

В дебаггере проверял переменная
C++
1
int lenghtFile
содержит в себе количество элементов в файле, а точнее 61. Но при выводе на экран заканчивается на 25 элементе.
Прошу помощи в этой проблеме.

Сам код:

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
34
35
struct objectsMain
{
    int id;
    int lenghtPath;
};
 
void main()
{
    fstream _mypath("C:\\dynamicobjects.data");
 
    _mypath.seekp(4, ios::beg);
 
    int lenghtFile;
 
    _mypath.read((char*) &lenghtFile, sizeof lenghtFile);
 
    while (!_mypath.eof())
    {
        objectsMain readFile;
 
        _mypath.read((char*) &readFile, sizeof readFile);
 
        cout<<readFile.id<<endl;
 
        int sum = readFile.lenghtPath;
 
        char *str = new char[sum];
 
        _mypath.read((char*) str, sum);
 
        str[sum] = NULL;
 
        cout<<str<<endl<<endl;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2012, 22:22
Ответы с готовыми решениями:

Переделать в коде чтение из файла в чтение с клавиатуры
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен...

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

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

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание...

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

23
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,178
02.02.2012, 22:32 2
У sizeof явно не хватает скобок... Память выделенная под str, кстати, невозбранно теряется.
0
Том Ардер
Модератор
Эксперт по математике/физике
3828 / 2440 / 327
Регистрация: 15.06.2009
Сообщений: 4,456
02.02.2012, 23:50 3
Цитата Сообщение от daqq Посмотреть сообщение
int sum = readFile.lenghtPath
А каково значение sum после этого? Хорошо бы ещё и содержимое файла посмотреть - какие элементы в нём (если их всего 61)
0
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
02.02.2012, 23:57 4
надо бы
C++
1
2
3
char *str = new char[sum+1];
...
str[sum] = '\0';
, а после cout надо бы
C++
1
delete[] str;
и, надеюсь, данные в файле идут сплошняком, т.е. без пробелов и пр.
C++
1
_mypath.seekp(4, ios::beg);
тоже подозрительно: зачем? тем более, что тут только чтение из файла
0
daqq
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 14
03.02.2012, 11:47  [ТС] 5
Итак всё по порядку:
Цитата Сообщение от Том Ардер Посмотреть сообщение
А каково значение sum после этого? Хорошо бы ещё и содержимое файла посмотреть - какие элементы в нём (если их всего 61)
Переменная sum, после чтения является длиной строки.

Цитата Сообщение от retmas Посмотреть сообщение
и, надеюсь, данные в файле идут сплошняком, т.е. без пробелов и пр.
Код C++
1
_mypath.seekp(4, ios::beg);
тоже подозрительно: зачем? тем более, что тут только чтение из файла
Там идёт заголовок файла размером в 4 байта, поэтому сделал отступ!
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.02.2012, 12:08 6
Цитата Сообщение от NoMasters Посмотреть сообщение
У sizeof явно не хватает скобок.
sizeof не требует скобок.
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
03.02.2012, 12:25 7
Цитата Сообщение от fasked Посмотреть сообщение
sizeof не требует скобок.
Только если используется с именем переменной. При использовании с именем типа скобки обязательны. Но в данном случае да, не требует))
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.02.2012, 12:28 8
Цитата Сообщение от silent_1991 Посмотреть сообщение
Только если не используется с именем типа
sizeof от типа, где его можно взять от имени переменной, ну уж не-е-ет
0
silent_1991
03.02.2012, 12:31
  #9

Не по теме:

C
1
2
3
int some_variable;
/* ... */
int *arr = (int *)malloc(some_size * sizeof(int)); // Здесь я предпочту sizeof(int), хотя можно и sizeof some_variable
Вот так вот :D

0
fasked
03.02.2012, 13:29
  #10

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Вот так вот
Не-не. Надо так:
C
1
2
3
4
5
int *arr = NULL;
 
if ((arr = malloc(SOME_SIZE * sizeof(*arr))) == NULL)
{
}

0
Том Ардер
Модератор
Эксперт по математике/физике
3828 / 2440 / 327
Регистрация: 15.06.2009
Сообщений: 4,456
03.02.2012, 15:04 11
Оффтопик:
fasked, вынужден не согласиться с Вами. ИМХО, прав всё-таки
silent_1991,
http://msdn.microsoft.com/en-us/library/0w557fh7%28v=VS.80%29.aspx

Онтопик:
Если проблемы с 25-м элементом данных, то, может быть, в файле что-то не так записано в этом месте?
0
fasked
03.02.2012, 15:25
  #12

Не по теме:

Цитата Сообщение от Том Ардер Посмотреть сообщение
fasked, вынужден не согласиться с Вами. ИМХО, прав всё-таки
silent_1991,
Вы это о чем?

0
Том Ардер
Модератор
Эксперт по математике/физике
3828 / 2440 / 327
Регистрация: 15.06.2009
Сообщений: 4,456
03.02.2012, 16:26 13
Оффтопик, вот о чём:

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Не-не. Надо так:

C
1
2
3
4
int *arr = NULL;
if ((arr = malloc(SOME_SIZE * sizeof(*arr))) == NULL)
{
}

0
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
03.02.2012, 16:28 14
Цитата Сообщение от daqq Посмотреть сообщение
Там идёт заголовок файла размером в 4 байта, поэтому сделал отступ!
никакого отступа вы там не сделали. читайте для чего seekp. да и покажите сам файл:какой отступ в 4 байта? и здесь вы его не считали уже?
C++
1
_mypath.read((char*) &lenghtFile, sizeof lenghtFile);
и, пользуясь ф-ями не форматированного ввода, вы нигде не беспокоитесь о считывании, например, '\n'.
Цитата Сообщение от retmas Посмотреть сообщение
данные в файле идут сплошняком, т.е. без пробелов и пр.
?
0
fasked
03.02.2012, 16:56
  #15

Не по теме:

Цитата Сообщение от Том Ардер Посмотреть сообщение
Оффтопик, вот о чём:
Ну и все равно непонятно о чем именно Вы. То, что написал silent и я, по сути одно и тоже. Я лишь говорю о том, что на мой взгляд правильнее было бы стараться не использовать для sizeof тип переменной, а использовать именно ее имя. Во-первых, потому что тип переменной в данном случае лишняя информация, что можно сравнить с венгерской нотацией, например, сторонником которой я не являюсь, а скорее даже наоборот - я противник этой нотации. А во-вторых, если тип переменной изменится, то придется вносить изменения в код дважды, а не единожды. В любом случае все это обсуждение синтаксического сахара. А Вы видимо не поняли нашей шутливой формы общения ;)
Так вот теперь я обосновал свою точку зрения на этот момент. Парируйте. Скажите мне, в чем я не прав.
Кстати, есть специальный тег для оффтопа.

1
Том Ардер
Модератор
Эксперт по математике/физике
3828 / 2440 / 327
Регистрация: 15.06.2009
Сообщений: 4,456
03.02.2012, 17:16 16
fasked,

Не по теме:

Я считаю, что существенно отличаются

C
1
char *cp = (char *)malloc( 100, sizeof(char) ); /* 100 bytes */
и

C
1
2
char *ip = NULL;
ip = (char *)malloc( 100, sizeof(*ip) ); /* 400 bytes */

0
silent_1991
03.02.2012, 17:21
  #17

Не по теме:

Том Ардер, а я считаю, что стоит обратить внимание на звёздочку :D

0
retmas
03.02.2012, 17:27
  #18

Не по теме:

тоже поофтопить чтоле, чтобы тс вообще забыл для чего топик создал:D

0
Том Ардер
Модератор
Эксперт по математике/физике
3828 / 2440 / 327
Регистрация: 15.06.2009
Сообщений: 4,456
03.02.2012, 17:56 19

Не по теме:

silent_1991,
Вы правы - слишком я серьёзно повёлся и бросился в бой за истину святую :D



А к ТС претензия: выложил бы сразу описание структуры файла да сам файл - давно бы уже раскопали, где там собака порылась.
0
daqq
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 14
03.02.2012, 19:10  [ТС] 20
Я бы выложил, но вот беде, зачитался вашей дискуссией)
Ну да ладно, ловите файл и структуру.
0
Вложения
Тип файла: rar dynamicobjects.rar (1.2 Кб, 7 просмотров)
03.02.2012, 19:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2012, 19:10

Чтение файла с несколькими знаками конца файла
В файле несколько раз встречается ноль, и ни как не получается прочитать его...

Чтение текстового файла специфического файла
Добрый день! Есть один текстовый файл определенного формата. Заголовок по...

Чтение файла
Помогите пожалуйста. Не пойму в чем дело. Проблема в указателе pnt. Постоянно...


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

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

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