Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/38: Рейтинг темы: голосов - 38, средняя оценка - 4.89
Alex90
20 / 20 / 7
Регистрация: 30.01.2009
Сообщений: 103
1

Не запускается програма с seekg

23.02.2009, 19:23. Просмотров 6824. Ответов 3
Метки нет (Все метки)

У меня возникает проблема с использованием seekg с этим кодом программа не запускается
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
// load a file into memory
#include <iostream>
#include <fstream>
using namespace std;
 
int main () {
  int length;
  char * buffer;
 
  ifstream is;
  is.open ("test.txt", ios::binary );
 
  // get length of file:
  is.seekg (0, ios::end);
  length = is.tellg();
  is.seekg (0, ios::beg);
 
  // allocate memory:
  buffer = new char [length];
 
  // read data as a block:
  is.read (buffer,length);
 
  is.close();
 
  cout.write (buffer,length);
 
  delete[] buffer;
  return 0;
}
а вот эта часть кода совсем не работает вызывая фатал в другой программке
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
    
    
  person pers;                  // создать объект person 
  ifstream infile;              // создать входной файл
  infile.open ("GROUP.DAT",ios::in|ios::binary); // открыть
                                                // файл
  infile.seekg(0, ios::end);    // установить указатель на 0
                                // байт от конца файла
  int endposition = infile.tellg();      // найти позицию
  int n = endposition / sizeof(person);  // число человек
  printf ("\nIn file ");
  printf ("%d", n); 
  printf (" man");
  printf ("\nEnter # person: ");
  outfile.open ("test.txt", ofstream::out | ofstream::app);
  outfile << "This sentence is appended to the file content\n";
  outfile.close();
  scanf ("%d", n);
  int position = (n-1) * sizeof(person); // умножить размер
                         // данных под персону на число персон
  infile.seekg(position);               // число байт от начала
                         // прочитать одну персону
  infile.read( reinterpret_cast<char*>(&pers), sizeof(pers) );
  pers.showData();                      //вывести одну персону
  printf ("\n");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2009, 19:23
Ответы с готовыми решениями:

Функция seekg
Не могу понять как применить функцию seekg так, чтобы она ставила указатель на...

методы seekg и seekp
void my_work(const char *str, double KV) throw (myError) { fstream File(str,...

Обработка файлов. Функция seekg();
ifstream fileReader(&quot;sdf.txt&quot;); int a; while (fileReader &gt;&gt; a) { ...; } А...

Разница между seekg() и seekp()
В чём же разница? Вот допустим открыл я файл: fstream...

Функция seekg() как работает?
Надо считывать из бинарного файла числа, которые стоят на четных позициях. Надо...

3
Шерсть-На-Носу
46 / 46 / 8
Регистрация: 30.01.2009
Сообщений: 168
23.02.2009, 22:49 2
По поводу seekg - была у меня когда-то такая же проблема при определении длины файла таким способом. На MS Visual Studio 6.0. В чем дело, так и не понял... Разбираться было некогда, поэтому я вместо seekg (0, ios::beg); просто закрыл файл, а потом снова его открыл.

Добавлено через 13 минут 45 секунд
По поводу второго - вероятно, та же проблема - после установки курсора чтения в конец файла, он уже никуда не перемещается.
0
Alex90
20 / 20 / 7
Регистрация: 30.01.2009
Сообщений: 103
24.02.2009, 01:52  [ТС] 3
ну, у меня Dev-C++ c первым я разобрался, глупая ошибка с названием файла сделал опечатку в место test.txt получилось tesy.txt с этим я уже разобрался
а вот с вторым.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
person pers;                  
    ifstream infile;              
    ifstream outfile;
    infile.open ("GROUP.DAT",ios::in|ios::binary); 
    infile.seekg(0, ios::beg);//, ios::end);
    int endposition = infile.tellg(); 
    int n = endposition / sizeof(person);
    printf ("\nIn file ");
           printf ("%d", n); 
           printf (" man");
    printf ("\nEnter # person: ");
    outfile.open ("GROUP.DAT", ofstream::out | ofstream::app);
//----------Где-то здесь ошибка---
           scanf ("%d", n); 
           int position = (n-1) * sizeof(person);
    infile.seekg(position); 
    infile.read( reinterpret_cast<char*>(&pers), sizeof(pers) );
    pers.showData();                     
    printf ("\n");
//---------------------------------
Добавлено через 2 часа 54 минуты 38 секунд
фатал нашел был здесь
C++
1
    scanf ("%d", &n);
но блин как прогнать курсор но файлу?
0
Patio
0 / 0 / 0
Регистрация: 02.04.2015
Сообщений: 2
19.01.2016, 04:44 4
seekg() не срабатывает по окончанию файла
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2016, 04:44

seekg() не срабатывает по окончанию файла
почему когда чтение доходит до третей записи (в файле всего три стройчки с int,...

Как работает команда seekg?
Всем привет!!! Объясните пожалуйста на примере как работает функция seekg?...

Почему clear необходимо использовать до seekg?
...и нельзя сразу после? Долго не могла решить проблему пока не наткнулась на...


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

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

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