Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с fstream seekg

12K
27 февраля 2006 года
Andrey_Shark
4 / / 28.07.2005
Обьясните, в чем проблема:

Код:
#include <fstream>
#include <iostream>
using namespace std;
void main(void)
{
    ifstream mfile("C:\\Cpp\\in.txt", ios::in);
    char str[40];

if (mfile)
{
    while(mfile)
    {
        mfile.getline(str, 40);
        cout << str;
    }

    mfile.seekg(0); // не переводит :(

    mfile.getline(str, 40);
    cout << str;

    cin >> str;
    mfile.close();
}
else cout << "File not found";
}


Я думал что он закрывает файл, но если самому открыть и закрыть файл всеравно таже проблема остается.
После цикла значение mfile.tellg() {_Stz=0 _Myoff=0 _Fpos=0}
переходит в mfile.tellg() {_Stz=-1 _Myoff=-1 _Fpos=0}. Подскажите решение, буду благодарен.
324
27 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Andrey_Shark
Обьясните, в чем проблема:

Код:
#include <fstream>
#include <iostream>
using namespace std;
void main(int argc, char *argv[])
{
    ifstream mfile("C:\\Cpp\\in.txt", ios::in);
    char str[40];

if (mfile)
{
    while(mfile)
    {
        mfile.getline(str, 40);
        cout << str;
    }

    mfile.seekg(0); // не переводит :(

    mfile.getline(str, 40);
    cout << str;

    cin >> str;
    mfile.close();
}
else cout << "File not found";
}


Я думал что он закрывает файл, но если самому открыть и закрыть файл всеравно таже проблема остается.
После цикла значение mfile.tellg() {_Stz=0 _Myoff=0 _Fpos=0}
переходит в mfile.tellg() {_Stz=-1 _Myoff=-1 _Fpos=0}. Подскажите решение, буду благодарен.



Во первых, что эта программа должна делать?

Цитата:

Я думал что он закрывает файл,...


Кто закрывает файл?

Цитата:

 
Код:
while(mfile)
{
    mfile.getline(str, 40);
    cout << str;
}



Конец файла проверяй

 
Код:
while(!mfile.eof())
{
...
}


Закрыть файл close()
12K
01 марта 2006 года
Andrey_Shark
4 / / 28.07.2005
Допустим в файле in.txt написано: "Привет Вася!". То он должен вывести на экран: "Привет Вася!Привет Вася!". Проблема в том что он не переводит курсор в начало(seekg(0)). Вместо этого он выводит на экран одну строку: "Привет Вася!". Скомпиляйте и посмотрите. Я пробовал заменить while(mfile) на while(!mfile.eof()) эффекта нет :(.
324
01 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Andrey_Shark
Допустим в файле in.txt написано: "Привет Вася!". То он должен вывести на экран: "Привет Вася!Привет Вася!". Проблема в том что он не переводит курсор в начало(seekg(0)). Вместо этого он выводит на экран одну строку: "Привет Вася!". Скомпиляйте и посмотрите. Я пробовал заменить while(mfile) на while(!mfile.eof()) эффекта нет :(.



Seekg работает, если ты открываешь файл в двоичном формате (ios::bin), если тебе надо перевести курсор на начало файла, то закрой и открой файл заново.

12K
01 марта 2006 года
Andrey_Shark
4 / / 28.07.2005
Цитата:
Originally posted by AndreySar
Seekg работает, если ты открываешь файл в двоичном формате (ios::bin), если тебе надо перевести курсор на начало файла, то закрой и открой файл заново.


Это работает если я обьявлю еще один файловый поток и буду открывать в нем. А если закрыть и закрыть старый то эффекта нет mfile.tellg() всеравно будет {_Stz=-1 _Myoff=-1 _Fpos=0}.

324
02 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Andrey_Shark
Это работает если я обьявлю еще один файловый поток и буду открывать в нем. А если закрыть и закрыть старый то эффекта нет mfile.tellg() всеравно будет {_Stz=-1 _Myoff=-1 _Fpos=0}.


Все работает с одним потоком

Код:
#include <fstream.h>
#include <iostream.h>

//using namespace std;
void main(int argc, char *argv[])
{
    ifstream mfile;

    mfile.open("C:\\in.txt");
    char str[40];

if (mfile)
{

    while(!mfile.eof())
    {
        mfile>>str;
    cout << str<<endl;
    }

    //mfile.seekg(1); // не переводит
    mfile.close();
    mfile.open("C:\\in.txt");

    while(!mfile.eof())
    {
        mfile>>str;
    cout << str;
    }

    //cin >> str;
    mfile.close();
}
    else cout << "File not found";
}


Этот код читает содержимое файла два раза
12K
12 марта 2006 года
Andrey_Shark
4 / / 28.07.2005
Да, ты прав все можно сделать одним потоком, я не парюсь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог