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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
daqq
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 14
02.02.2012, 22:22     Чтение файла #1
Вообщем проблема заключается в том, что при чтении файла и вывод его в консоль, само чтение файла до конца не доходит.

В дебаггере проверял переменная
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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2012, 22:22     Чтение файла
Посмотрите здесь:

C++ Чтение из файла.
Чтение из файла C++
C++ Чтение файла
C++ Чтение из файла
Чтение из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
02.02.2012, 22:32     Чтение файла #2
У sizeof явно не хватает скобок... Память выделенная под str, кстати, невозбранно теряется.
Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,921
02.02.2012, 23:50     Чтение файла #3
Цитата Сообщение от daqq Посмотреть сообщение
int sum = readFile.lenghtPath
А каково значение sum после этого? Хорошо бы ещё и содержимое файла посмотреть - какие элементы в нём (если их всего 61)
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
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);
тоже подозрительно: зачем? тем более, что тут только чтение из файла
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 байта, поэтому сделал отступ!
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.02.2012, 12:08     Чтение файла #6
Цитата Сообщение от NoMasters Посмотреть сообщение
У sizeof явно не хватает скобок.
sizeof не требует скобок.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.02.2012, 12:25     Чтение файла #7
Цитата Сообщение от fasked Посмотреть сообщение
sizeof не требует скобок.
Только если используется с именем переменной. При использовании с именем типа скобки обязательны. Но в данном случае да, не требует))
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.02.2012, 12:28     Чтение файла #8
Цитата Сообщение от silent_1991 Посмотреть сообщение
Только если не используется с именем типа
sizeof от типа, где его можно взять от имени переменной, ну уж не-е-ет
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
Вот так вот

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)
{
}

Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,921
03.02.2012, 15:04     Чтение файла #11
Оффтопик:
fasked, вынужден не согласиться с Вами. ИМХО, прав всё-таки
silent_1991,
http://msdn.microsoft.com/en-us/libr...=VS.80%29.aspx

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

Не по теме:

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

Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,921
03.02.2012, 16:26     Чтение файла #13
Оффтопик, вот о чём:

Не по теме:

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

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

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

Не по теме:

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

Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,921
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 */

silent_1991
03.02.2012, 17:21
  #17

Не по теме:

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

retmas
03.02.2012, 17:27
  #18

Не по теме:

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

Том Ардер
Модератор
 Аватар для Том Ардер
3619 / 2238 / 271
Регистрация: 15.06.2009
Сообщений: 3,921
03.02.2012, 17:56     Чтение файла #19

Не по теме:

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



А к ТС претензия: выложил бы сразу описание структуры файла да сам файл - давно бы уже раскопали, где там собака порылась.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2012, 19:10     Чтение файла
Еще ссылки по теме:

Чтение файла C++
C++ Чтение файла
чтение из файла C++

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

Или воспользуйтесь поиском по форуму:
daqq
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 14
03.02.2012, 19:10  [ТС]     Чтение файла #20
Я бы выложил, но вот беде, зачитался вашей дискуссией)
Ну да ладно, ловите файл и структуру.
Вложения
Тип файла: rar dynamicobjects.rar (1.2 Кб, 7 просмотров)
Yandex
Объявления
03.02.2012, 19:10     Чтение файла
Ответ Создать тему
Опции темы

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