Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Roland Discane
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 45
#1

Как зафиксировать позицию в файле, а потом продолжить с неё считывание - C++

26.03.2014, 02:29. Просмотров 449. Ответов 4
Метки нет (Все метки)

Всем доброй ночи (или доброго утра). Возник вопрос о том, как зафиксировать позицию в файле, а потом продолжить с неё читать. Набросал код, но он не прёт. Помогите пожалуйста разобраться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    int pos = 0;
    int i = 0;
    std::ifstream fileRead("F://original.txt");
    while (fileRead.eof()) {
        i = 0;
        fileRead.seekg(pos);
        while (i < 4) {
            fileRead.get();
            std::cout << "we";
            i++;
        }
        pos = fileRead.tellg();
        std::cout << "Reading " << pos << " positions";
    }
    fileRead.close();
    system("PAUSE");
    return 0;
}
Добавлено через 7 минут
А, у меня тут косяк
C++
1
while (fileRead.eof())
надо так
C++
1
while (!fileRead.eof())
Лол
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 02:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как зафиксировать позицию в файле, а потом продолжить с неё считывание (C++):

Файлы. Как установить позицию в файле? - C++
Как установить позицию в файле с которой начнется, например, чтение данных. (Нужно установить в начало).

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

Преобразовать массив так, чтобы сначала шли все элементы с вещественной частью, а потом без неё - C++
3. Создать массив из 10 вещественных чисел. Преобразовать массив так, чтобы сначала шли все элементы с вещественной частью, а потом без...

Как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле? - C++
подскажите пожалуйста, как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле?. ПС не...

Найти в файле строку максимальной длины и ее позицию - C++
В файле data.txt построчно записан некоторый текст. Найти строку макси- мальной длины и ее позицию.

Задача : сохранить несколько чисел в файле и потом их прочитать - C++
Задача : сохранить несколько чисел в файле (ну детский сад!) и потом их прочитать... Грабли начинаются с записи. Хотим писать в двоичном...

4
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 02:39 #2
Цитата Сообщение от Roland Discane Посмотреть сообщение
Возник вопрос о том, как зафиксировать позицию в файле, а потом продолжить с неё читать.
Я так понял, что зафиксировать получилось (т.е. вывести на консоль позицию файлового курсора), но особого смылса в использовании, в данном коде, не вижу. Что с фиксацией, что без, будет одинаково работать.
0
Roland Discane
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 45
26.03.2014, 02:44  [ТС] #3
Немного переделал. Теперь в файл нужно дописывать. Почему-то пишет только последние значения, а до этого много пробелов.
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
int main()
{
    int pos = 0;
    int posw = 0;
    int i = 0;
    std::ifstream fileRead("F://original.txt");
    while (!fileRead.eof()) {
        i = 0;
        fileRead.seekg(pos);
        while (i < 4) {
            fileRead.get();
            i++;
        }
        pos = fileRead.tellg();
        std::ofstream fileWrite("F://decipher3.txt");
        
            i = 0;
            fileWrite.seekp(posw);
            while (i < 4) {
                fileWrite << i;
                i++;
            
            posw = fileWrite.tellp();
            std::cout << "Write!" << std::endl;
        }
        fileWrite.close();
        std::cout << "Reading " << pos << " positions" << std::endl;
    }
    fileRead.close();
 
    system("PAUSE");
    return 0;
}
Добавлено через 30 секунд
alsav22, Это чисто для тренировки, учусь фиксировать на простом. Сейчас немного изменил и вот тут возникла проблема с заполнением. В файл почему-то записываются пробелы.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 03:01 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ

Не по теме:

Цитата Сообщение от Roland Discane Посмотреть сообщение
Это чисто для тренировки, учусь фиксировать на простом.
Учиться на бессмысленном не стоит.



Добавлено через 5 минут
Цитата Сообщение от Roland Discane Посмотреть сообщение
В файл почему-то записываются пробелы.
Файл, в цикле, постоянно открывается для записи, при этом все данные в нём стираются, а запись начинается не с начала, а с сохранённой позиции.

Добавлено через 3 минуты
Дозапись можно делать без всякого сохранения позиций, открывая файл для дозаписи:
C++
1
std::ofstream fileWrite("F://decipher3.txt", std::ios::app);
1
Roland Discane
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 45
26.03.2014, 03:06  [ТС] #5
alsav22, Спасибо огромное, это как раз то, что нужно!)
0
26.03.2014, 03:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 03:06
Привет! Вот еще темы с ответами:

Как ввести текст в файл, а потом через функцию продолжить другой текст в этом же файле - Java SE
Здравствуйте. Допустим, я хочу ввести текст в файл через main, а потом мне нужно вызвать функцию, в которой я должен продолжить писать...

Как пометить строку в AdoQuery, чтобы потом на неё вернуться? - C++ Builder БД
Ребята помогите по такому вопросу как можно пометить строку в таблице чтобы потом на неё можно было вернутся? Выслушаю все предложения

Matlab GUIDE: зафиксировать позицию и размер контрола - Matlab
Есть ли в GUIDE возможность прикреплять контрол к каким-либо границам окна? Я поставил uipanel на форму, но при изменении высоты окна он...

Как сделать запись данных в файл и потом считывание? - LabVIEW
В цикле фор луп идет вычисление, нужно чтобы данные записывались в файл и потом при старте эти данные поступали в вычисление. У меня после...


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

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

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