LINUX.ORG.RU

Проблемы с открытием файла на разных версиях Linux


0

1

Добрый день! Запускаю приложение на Ubuntu и RedHat. В первом случае все ОК (g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3), файл открывается, и выполняются необходимые действия, во втором случае (g++ (gcc) 3.2.2 20030222) файл не открывается (is_open() возвращает false), хотя путь к файлу указан верно...RedHat не поддерживает такой способ открытия файла? Нужно включить еще какой-то заголовочный файл?Не подскажете, с чем может быть проблема?

std::fstream _File;
_File.open(sFileName.c_str(), std::ios::in|std::ios::out|std::ios::binary);


Попробуй поймать исключение ios_base::failure и посмотреть, что же пишет метод what().

grondek
()

Маша, тебе уже 100 раз говорили, что сишные задачи надо на сях писать, а не лепить туда эти плюсы!

И еще: в линуксе не нужно указывать "binary", это тебе не мастдайка!

Anon
()
Ответ на: комментарий от Masha

Если уж там точно есть баг, обновляться — не вариант, а с тебя требуют выполнения домашних заданий на С++, то напиши свой класс fstream, реализованный через обычный libc. Или вообще функции open/close сишные используй.

Anon
()

Кстати, в RedHat SELinux по-умолчанию настроен параноидально, может в этом проблема и тебе просто что-то в системе запрещает открывать файл на запись, например?

grondek
()
Ответ на: комментарий от grondek

ну пусть у меня такие же параметры.

Masha
() автор топика
Ответ на: комментарий от Masha

тогда только первый совет - поймать исключение и посмотреть, что конкретно вызывает ошибку открытия файла.

Чаще всего банальные persmission denied или file not exists.

grondek
()
Ответ на: комментарий от grondek

Странно, если оставить только один параметр, например, ios::in или только ios::out, is_open() возвращает true. Может, кто-нибудь сталкивался с подобной проблемой?

Masha
() автор топика
Ответ на: комментарий от Masha

Это ещё не показатель. Попробуй выключи SELinux для начала и проверь.

UVV ★★★★★
()

Проблема с древностью вашего Red Hat. На этом глюкаво г-не мамонта можете даже не пытаться получить корректное поведение корректных программ.

slovazap ★★★★★
()
Ответ на: комментарий от Masha

а так?

_File.open(sFileName.c_str(),
  std::ios::in|
  std::ios::out|
  std::ios::app|
  std::ios::binary);

anonymous
()
Ответ на: комментарий от slovazap

затки свою помойку, тупой дегенерат

anonymous
()

g++ (gcc) 3.2.2 20030222

А оно умеет нормально плюсы? Я сомневаюсь.

RedHat не поддерживает такой способ открытия файла? Нужно включить еще какой-то заголовочный файл?Не подскажете, с чем может быть проблема?

Мощно.

strace и смотри что юзает.

_File.open(sFileName.c_str(), std::ios::in|std::ios::out|std::ios::binary);

А зачем там c_str() - она же должна стринг принимать. Про бинарь уже сказали - я не знаю нахрен это говно вообще нужно.

anonymous
()

На такие вопросы должна отвечать твоя программа. Ошибка в игнорировании базового правила программирования: если операция может завершиться с ошибкой, то нужно проверить успешность выполнения и обработать ошибку.

fopen ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.