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

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

23.02.2009, 19:23. Просмотров 6752. Ответов 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 (C++):

Функция 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() как работает?
Надо считывать из бинарного файла числа, которые стоят на четных позициях. Надо...

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

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
http://www.cyberforum.ru/cpp-beginners/thread933965.html
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2016, 04:44
Привет! Вот еще темы с решениями:

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

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

Некорректная установка seekg и seekp в многострочном файле
Добрый день! Не могу разобраться с мракобесием, которое начинает твориться с...

Различия в использовании seekg и seekp при работе с fstream
Если я использую класс fstream, тогда для перемещения внутри файла без разницы...


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

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

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