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

Ваш аккаунт

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

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

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

Проблема открытия файла ifstream (С++)

14K
18 ноября 2007 года
stimpi
100 / / 04.09.2007
в общем прога "список контактов", в ней я могу загружать произвольные списки контактов для разных пользователей, ниже подставлен эквивалент возвращаемых путей для файлов где лежат списки.
задокументированный код открывает файл, не задокументированный
не хочет. Неужели проблема в слишком длинном пути к файлу ?
Код:
ifstream inFile;
.
.
.
//inFile.open("C:\\Clients.dat");
inFile.open("C:\\Documents and Settings\\stimpi\\Рабочий стол\\temp\\OOP_C++\\PhoneList\\Clients.txt");
    if(inFile)
    {//some actions
}
else
{
//Some problems
}
1
18 ноября 2007 года
kot_
7.3K / / 20.01.2000
Нет. Ищите проблему в другом. Возможно проблема с правами доступа или с чем либо еще. Используйте GetLastError для диагностики ошибки.
14K
18 ноября 2007 года
stimpi
100 / / 04.09.2007
Цитата: kot_
Нет. Ищите проблему в другом. Возможно проблема с правами доступа или с чем либо еще. Используйте GetLastError для диагностики ошибки.


да, ошибка кроется в изменении ifstream объекта в считывании файла, что повторно его использование невозможно, по крайней мере моя студия в ниже приведенном примере печатает следущее:

Код:
int main(int argc, char* argv[]) {

    char *buf,*buf1;
    buf = new char[50];
    buf1 = new char[50];
    string path("C:\\Documents and Settings\\stimpi\\Рабочий стол\\temp\\OOP_C++\\PhoneList\\Clients.dat");
    ifstream in;
    in.open(path.c_str());
    if(!in)
       cout << "Error" << endl;
    else
    {
        while (in >> buf >> buf1)
        {
            cout << buf << " " << buf1 << endl;
        }
        in.close();
    }
       
    in.open(path.c_str());
    if(!in)
        cout << "Error" << endl;
    else
    {
        while (in >> buf >> buf1)
        {
            cout << buf << " " << buf1 << endl;
        }
        in.close();
    }
   
    cin.get();
    delete[] buf1;
    delete[] buf;
    return 0;
}
 
Код:
Иванова_Любовь_Николаевна 8-044-2568478
Петрук_Олег_Константинович 8-044-6547891
Error
те в при первом открытии все считывается корректно, при втором не открывает файл.

ЗЫ проблему решил переносом ifstream объекта в метод запонления списка
1
18 ноября 2007 года
kot_
7.3K / / 20.01.2000
Не забывайте о том что файловые потоки осуществляют буферизованный ввод/вывод. Поэтому буфер надо очищать.
Т.е.
 
Код:
in.clear(0);

спасет отца русской демократии. :)
1
18 ноября 2007 года
kot_
7.3K / / 20.01.2000
Используйте репутацию. Это маленькие весы под аватаром. Не захламляйте форум "сенксами" и т.п. Ну а так всегда пожалуйта ;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог