Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Позицианирование по файлу, Как позиционироваться по файлу? 
V
    Опции темы
RealJester
Дата 18.3.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Непонятен следующий момент, если мы открыли файл (пользуемся потоками fstream), потом считали что-нибудь из него, то как нам вернуться обратно к началу и повторно что-то считать?

Например следующий код, считывает по символу из какого-то файла:
Код

        ifstream fin(fileNameRead);

        while(fin.get(nowChar))
        {
                cout << nowChar;
        }

Но повторно мы не сможем так сдлеать (если только не закроем и откроем файл заново).
Как позиционироваться по файлу элегантно (то есть без повторного закрытия и открытия)?
PM MAIL   Вверх
SparF
Дата 18.3.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



а гугл зачем?  smile 
http://ad.cctpu.edu.ru/cpp/glava27_8.htm


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
RealJester
Дата 18.3.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



SparF, пасиб за ссылку, но всеравно не получается... Позиционироваться позиционируюсь, но вывести содержимое файла заново не могу.
PM MAIL   Вверх
SparF
Дата 18.3.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



оч хороший пример нашел тут, и главное - рабочий и более в тему. Если работать не будет - покажи код.


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
RealJester
Дата 18.3.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



SparF, тоже не получается 

Вот вырезка из кода:
Код

        ifstream fin(fileNameRead);


        while(fin.get(nowChar))
        {
                cout << nowChar;
        }
        cout << endl;
        
        fin.seekg(0);
        
       // ТУТ ДОЛЖЕН ПРОИЗОЙТИ ПОВТОРНЫЙ ВЫВОД СОДЕРЖИМОГО ФАЙЛА, А ЭТОГО НЕ ПРОИСХОДИТ :( 
       while(fin.get(a))
        {
                cout << a;
        }
        fin.close();

PM MAIL   Вверх
Xenon
Дата 18.3.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



RealJester, может file.seekg(0,std::ios::beg);?


Это сообщение отредактировал(а) Xenon - 18.3.2007, 15:31


--------------------
user posted image  
PM MAIL   Вверх
RealJester
Дата 18.3.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Xenon, не работает...
PM MAIL   Вверх
SparF
Дата 18.3.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



Не сразу вспомнил))) я в свое время на эту штуку натыкался =)
вот рабочий код:
Код

#include <iostream>
#include <fstream>
using namespace std;

int main () {

char nowChar,a;

ifstream is;
is.open ("test.txt", ios::binary );

while(is.get(nowChar))
{
    cout << nowChar;
}
is.clear();
is.seekg(0,ios::beg);

while(is.get(a))
{
    cout << a;
}

is.close();

return 0;
}

Дело в том, что когда мы доходим при помощи is.get(nowChar) до конца файла, устанавливается флаг ошибки. Собственно is.clear() очищает этот флаг


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
Xenon
Дата 18.3.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



SparF, ах вот она сволочь где запряталась, то есть по той же причине я не могу одной переменной fstream открывать поочередно два разных файла на чтение? Мне нужно сбросить флаг?

Это сообщение отредактировал(а) Xenon - 18.3.2007, 18:04


--------------------
user posted image  
PM MAIL   Вверх
zkv
Дата 18.3.2007, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Xenon @  18.3.2007,  18:03 Найти цитируемый пост)
SparF, ах вот она сволочь где запряталась, то есть по той же причине я не могу одной переменной fstream открывать поочередно два разных файла на чтение? Мне нужно сбросить флаг?

да, и помнится я об этом как раз тебе говорил smile, на твоем примере  smile 

Это сообщение отредактировал(а) zkv - 18.3.2007, 18:24
PM MAIL   Вверх
SparF
Дата 18.3.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



Xenon, ну без clear() вот этот вот код не работает )))) :
Код

#include <iostream>
#include <fstream>
using namespace std;

int main () {

char nowChar,a;

ifstream is;

is.open ("test.txt", ios::binary );
while(is.get(nowChar))
{
    cout << nowChar;
}

is.close();
is.clear();

is.open ("test2.txt", ios::binary );
while(is.get(a))
{
    cout << a;
}

is.close();

return 0;
}


Почитать можно тут


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
Xenon
Дата 18.3.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



zkv, да, я как раз чего и вспомнил-то smile Только помню почему-то не помогла в тот раз эта функция ... Вот уже и не помню почему. Как-нибудь проверю smile


--------------------
user posted image  
PM MAIL   Вверх
console
Дата 18.3.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: 1
Всего: 3



rewind(pointer2file)


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
RealJester
Дата 19.3.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



SparF, большое спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.