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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа fopen, с различными компиляторами 
:(
    Опции темы
Annihilator
Дата 19.6.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Товарищи, столкнулся с такой вещью. У Шилдта, у Дейтела есть такой пример для файлов
Код

    ofstream out("data.txt",ios::out);
    if (!out)
    cout<< "Cannot open file!";
    else
    out<< "URRA!";

код не дословно но смысл сохранен. Он заключается в том, что если мы хотим открыть файл для записи туда, мы должны проверить его на существование, если его нет то выдаст "Cannot open file!". 
Теперь вопрос, зачем это делать если, как я убедился, файл создается в случае отсутствия, либо другой вопрос, может быть в ранних средах (до VS2008, builder 2006) он не создавался???

Это сообщение отредактировал(а) Annihilator - 19.6.2008, 22:27


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Daevaorn
Дата 19.6.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Согласитесь, что "Cannot open file!" это не то же самое что "файла не существует".  Причин неоткрытия файла на запись много.
PM MAIL WWW   Вверх
DRUID3
Дата 19.6.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile  он может быть не создан по 1024 причинам!  smile  Можно не проверять в учебном алгоритме, но в реальных приложениях делать это надо обязательно, да еще корректно обработать эту ошибку, а не вывести на консоль "ой, чувак, у тя файл не создаеЦЦо!"  smile 


--------------------
Every time if you use Linux, you are joined to the communism...
практика - критерий истины ... отделенной от нас пропастью субъективного восприятия...
PM MAIL WWW Skype   Вверх
bsa
Дата 19.6.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



кстати об ошибках, какой грамотный способ получения причины неоткрытия с помощью fstream?
PM   Вверх
rrrFer
Дата 19.6.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



bsa
есть функции для проверки потоков на ошибки eof,rdstate,fail,bad...они возвращаеют либо 0 либо 1, в зависимости от значении полей структуты io_state. Я бы так делал
PM MAIL WWW ICQ   Вверх
Annihilator
Дата 19.6.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



А может errno заюзать совместно с perror(char *mess)???


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
DRUID3
Дата 19.6.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(rrrFer @  19.6.2008,  22:08 Найти цитируемый пост)
bsa
есть функции для проверки потоков на ошибки eof,rdstate,fail,bad...они возвращаеют либо 0 либо 1, в зависимости от значении полей структуты io_state. Я бы так делал 

которые в свою очередь анализируют флаги поля state, которые можно обрабатывать(читать) напрямую - там и ошибки файловой системы можно отличить от ошибок оборудования, например... но не более того... Вообще-то только ОС может достоверно сказать почему не создан файл (если говорить только о файловых потоках)...


--------------------
Every time if you use Linux, you are joined to the communism...
практика - критерий истины ... отделенной от нас пропастью субъективного восприятия...
PM MAIL WWW Skype   Вверх
bsa
Дата 19.6.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



rrrFer, меня интересует причина. Например, No space on disk, Permission denied и подобное.

Добавлено через 1 минуту и 31 секунду
Цитата(Annihilator @ 19.6.2008,  23:14)
А может errno заюзать совместно с perror(char *mess)???

Есть гарантии, что errno (а perror работает через нее) будет содержать верное значение?
PM   Вверх
Annihilator
Дата 19.6.2008, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Ну тогда проверить Sys_nerr, на наличие новых добавленных кодов ошибок


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
bsa
Дата 20.6.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(Annihilator @ 19.6.2008,  23:22)
Ну тогда проверить Sys_nerr, на наличие новых добавленных кодов ошибок

Какому стандарту соответствует?
PM   Вверх
Annihilator
Дата 20.6.2008, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Цитата(bsa @  20.6.2008,  04:06 Найти цитируемый пост)
Какому стандарту соответствует? 

ANSI C 89 smile


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
bsa
Дата 20.6.2008, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(Annihilator @ 20.6.2008,  08:32)
Цитата(bsa @  20.6.2008,  04:06 Найти цитируемый пост)
Какому стандарту соответствует? 

ANSI C 89 smile

Очень странно. Все что я нашел в инете на эту тему звучит так: "Эта штука соответствует 4.4BSD с некоторыми ограничениями, но уже устарела и вместо нее нужно использовать strerror()". Про что-то стандартное ничего не нашел. Более того, народ жалуется, что на 64-х битных платформах эта штука не работает.
Можно мне ссылочку или цитату из стандарта?
PM   Вверх
Annihilator
Дата 20.6.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Цитата(bsa @  20.6.2008,  12:58 Найти цитируемый пост)
Можно мне ссылочку или цитату из стандарта? 

вот


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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