Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Проблемы с чтением из файла.


Автор: LeD4eG 3.2.2011, 22:03
Доброго времени суток!
возникли проблемы с решением задачи, точнее не совсем с решением самой задачи....
задача на поиск подстроки в файле. получил следующий код:

Код

#include<iostream>
#include<fstream>
#include<string>
#include<windows.h>

using namespace std;

char* Rus(const char* text);

int main(){
    const int len = 81;
    char word[len], line[len];
    cout<<Rus("Введите слова для поиска: ");
    cin>>word;

    ifstream fin("text.txt", ios::in | ios::_Nocreate);
    if(!fin) {
        cout<<Rus("Ошибка открытия файла.")<<endl;
        return 1;
    }

    while(fin.getline(line, len)){
        if(strstr(line,word)) {
            cout<<Rus("Совпадения найдены!")<<endl;
            return 0;
        }
    }
    cout<<Rus("Совпадения не найдены.")<<endl;
    return 0;
}
char bufRus[256];
char* Rus(const char* text){
    CharToOem(text, bufRus);
    return bufRus;
}

при запуске выводится сообщение "ошибка открытия файла". файл лежит в каталоге с программой....

P.S. подобные темы читал. некоторые свои ошибки уже исправил. 

Автор: panter 3.2.2011, 22:22
Плохой подход. Нужно указывать полный путь к файлу. 

Автор: Фантом 3.2.2011, 22:36
Вам не кажется, что в этой строчке:
Код

    ifstream fin("text.txt", ios::in | ios::_Nocreate);

не хватает одного символа "|" ?  smile 

Автор: Batbko 3.2.2011, 22:57
Цитата(Фантом @ 3.2.2011,  22:36)
Вам не кажется, что в этой строчке:
Код

    ifstream fin("text.txt", ios::in | ios::_Nocreate);

не хватает одного символа "|" ?  smile

нет

Автор: Фантом 3.2.2011, 23:20
А, да, действительно - торможу.

Автор: volatile 3.2.2011, 23:27
На студии при запуске программы, текущей директорией является директория проекта, а не директория где расположен екзешник. Другие среды не знаю, возможно и там такие-же фичи.
В опциях проекта можно изменить.
Ну и полный путь, как тут уже говорили, тоже решает.

Автор: LeD4eG 4.2.2011, 19:46
всё равно не помогает. указал полный путь. ошибка не уходит.
пользуюсь Visual C++ 2005 EE.

Автор: LeD4eG 4.2.2011, 20:21
всё равно не помогает. указал полный путь. ошибка не уходит.
пользуюсь Visual C++ 2005 EE.

Автор: panter 5.2.2011, 11:00
Приведи код с полным путем.

Автор: LeD4eG 5.2.2011, 17:55
Код

#include<iostream>
#include<fstream>
#include<string>
#include<windows.h>

using namespace std;

char* Rus(const char* text);

int main(){
    const int len = 81;
    char word[len], line[len];
    cout<<Rus("Введите слова для поиска: ");
    cin>>word;

    ifstream fin("C://Documents and Settings/Лётчик/Мои документы/Visual Studio 2008/Projects/Павловская/Семинар 5/task5_1/task5_1/text.txt", ios::in);
    if(!fin) {
        cout<<Rus("Ошибка открытия файла.")<<endl;
        return 1;
    }

    while(fin.getline(line, len)){
        if(strstr(line,word)) {
            cout<<Rus("Совпадения найдены!")<<endl;
            return 0;
        }
    }
    cout<<Rus("Совпадения не найдены.")<<endl;
    return 0;
}
char bufRus[256];
char* Rus(const char* text){
    CharToOem(text, bufRus);
    return bufRus;
}

Автор: panter 5.2.2011, 18:54
Попробуй путь без пробелов и символов кириллицы.

Автор: xvr 7.2.2011, 12:03
Слеши должны быть обратные ('//'), и после C: достаточно одного слэша

Код

    ifstream fin("C:\\Documents and Settings\\Лётчик\\Мои документы\\Visual Studio 2008\\Projects\\Павловская\\Семинар 5\\task5_1\\task5_1\\text.txt", ios::in);
Файл точно есть? Уж очень замысловатый путь  smile 

Автор: Molodec 7.2.2011, 18:09
Цитата(volatile @ 3.2.2011,  23:27)
На студии при запуске программы, текущей директорией является директория проекта, а не директория где расположен екзешник. Другие среды не знаю, возможно и там такие-же фичи.
В опциях проекта можно изменить.
Ну и полный путь, как тут уже говорили, тоже решает.

На Visual Studio 2010 именно директория Release/Debug является текущей. По крайней мере по-умолчанию.

Автор: borisbn 7.2.2011, 18:43
Цитата(volatile @  3.2.2011,  23:27 Найти цитируемый пост)
На студии при запуске программы, текущей директорией является директория проекта, а не директория где расположен екзешник. Другие среды не знаю, возможно и там такие-же фичи.В опциях проекта можно изменить.


Я, например, взял себе за правило сразу после создания проекта менять Project/Properties/Debugging\Working Directory на $(TargetDir) и такой проблемы не знаю smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)