#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";
}
Проблема с fstream seekg
Код:
Я думал что он закрывает файл, но если самому открыть и закрыть файл всеравно таже проблема остается.
После цикла значение mfile.tellg() {_Stz=0 _Myoff=0 _Fpos=0}
переходит в mfile.tellg() {_Stz=-1 _Myoff=-1 _Fpos=0}. Подскажите решение, буду благодарен.
Цитата:
Originally posted by Andrey_Shark
Обьясните, в чем проблема:
Я думал что он закрывает файл, но если самому открыть и закрыть файл всеравно таже проблема остается.
После цикла значение mfile.tellg() {_Stz=0 _Myoff=0 _Fpos=0}
переходит в mfile.tellg() {_Stz=-1 _Myoff=-1 _Fpos=0}. Подскажите решение, буду благодарен.
Обьясните, в чем проблема:
Код:
#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";
}
#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;
}
{
mfile.getline(str, 40);
cout << str;
}
Конец файла проверяй
Код:
while(!mfile.eof())
{
...
}
{
...
}
Закрыть файл close()
Допустим в файле in.txt написано: "Привет Вася!". То он должен вывести на экран: "Привет Вася!Привет Вася!". Проблема в том что он не переводит курсор в начало(seekg(0)). Вместо этого он выводит на экран одну строку: "Привет Вася!". Скомпиляйте и посмотрите. Я пробовал заменить while(mfile) на while(!mfile.eof()) эффекта нет :(.
Цитата:
Originally posted by Andrey_Shark
Допустим в файле in.txt написано: "Привет Вася!". То он должен вывести на экран: "Привет Вася!Привет Вася!". Проблема в том что он не переводит курсор в начало(seekg(0)). Вместо этого он выводит на экран одну строку: "Привет Вася!". Скомпиляйте и посмотрите. Я пробовал заменить while(mfile) на while(!mfile.eof()) эффекта нет :(.
Допустим в файле in.txt написано: "Привет Вася!". То он должен вывести на экран: "Привет Вася!Привет Вася!". Проблема в том что он не переводит курсор в начало(seekg(0)). Вместо этого он выводит на экран одну строку: "Привет Вася!". Скомпиляйте и посмотрите. Я пробовал заменить while(mfile) на while(!mfile.eof()) эффекта нет :(.
Seekg работает, если ты открываешь файл в двоичном формате (ios::bin), если тебе надо перевести курсор на начало файла, то закрой и открой файл заново.
Цитата:
Originally posted by AndreySar
Seekg работает, если ты открываешь файл в двоичном формате (ios::bin), если тебе надо перевести курсор на начало файла, то закрой и открой файл заново.
Seekg работает, если ты открываешь файл в двоичном формате (ios::bin), если тебе надо перевести курсор на начало файла, то закрой и открой файл заново.
Это работает если я обьявлю еще один файловый поток и буду открывать в нем. А если закрыть и закрыть старый то эффекта нет mfile.tellg() всеравно будет {_Stz=-1 _Myoff=-1 _Fpos=0}.
Цитата:
Originally posted by Andrey_Shark
Это работает если я обьявлю еще один файловый поток и буду открывать в нем. А если закрыть и закрыть старый то эффекта нет mfile.tellg() всеравно будет {_Stz=-1 _Myoff=-1 _Fpos=0}.
Это работает если я обьявлю еще один файловый поток и буду открывать в нем. А если закрыть и закрыть старый то эффекта нет 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";
}
#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";
}
Этот код читает содержимое файла два раза
Да, ты прав все можно сделать одним потоком, я не парюсь.