Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 07:41   #1
VorobeY1326
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 11
Вопрос Бинарные файлы

Доброго времени суток!
Возникла небольшая проблемка во время изучения бинарных файлов.
Если объявлять файл в теле main(), а открывать во вложенном цикле while(1) (для того, чтобы в случае ошибки была возможность повторить попытку открытия) , то открытие всегда возвращает отрицательный результат! Как с этим справиться?
Код:
int main()
{
  char adress[100];
  fstream bin;
  while(1)
  {
    cin.getline(adress, 100);
    bin.open(adress, ios::binary | ios::in | ios::out);
    if (! bin)
    continue;
    break;
  }
}
Заранее спасибо!!
VorobeY1326 вне форума Ответить с цитированием
Старый 09.05.2009, 12:34   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Должен открываться. Вот так работает:

Код:
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

int main(){

char adress[100];
fstream bin;

  while(1)
  {
    cin.getline(adress, 100);
    bin.open(adress, ios::binary | ios::in | ios::out);
    if (! bin)
     continue;
    break;
  }
cout<<"File is open"<<endl;
bin.close();

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.05.2009, 19:43   #3
VorobeY1326
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 11
По умолчанию

Хм..
А у меня и этот вариант не выходит из цикла, все время ! bin = 0..
Возникает 2 вопроса - 1)Какой адрес вы вводили и работало (проверить его) 2)Какой у вас компилятор?
Ответьте, пожалуйста, а то я уже ничего не понимаю..))
VorobeY1326 вне форума Ответить с цитированием
Старый 09.05.2009, 19:55   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
1)Какой адрес вы вводили и работало (проверить его)
Вводил имя файла ) У меня это "1.txt" (соответственно, в директории с программой валялся этот файл).
Цитата:
2)Какой у вас компилятор?
MinGW (wxDev-C++ 7)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.05.2009, 20:04   #5
VorobeY1326
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 11
По умолчанию

У меня borland Developer Studio 2006..
Пробовал "1.txt" в коде, который вы предложили..
Почему то все равно из цикла не выходит..
А может быть проблема в компиляторе?
VorobeY1326 вне форума Ответить с цитированием
Старый 09.05.2009, 20:12   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
А может быть проблема в компиляторе?
Все может быть. Но я очень сомневаюсь.

Скажите, а вы файл-то создаете? Сейчас ввел имя несуществующего файла - засел в цикле.
Файл должен существовать, иначе будете висеть.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.05.2009, 20:19   #7
VorobeY1326
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 11
По умолчанию

Ну да, создаю))
А как сделать, чтобы программа создавала и не висела?
Подскажите, пожалуйста!
p.s. А если есть файл *.txt НЕбинарный, а его имя ввожу, то будет работать?
VorobeY1326 вне форума Ответить с цитированием
Старый 09.05.2009, 20:26   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Можно как-то так. Сделает 5 попыток и успокоится.
Код:
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

int main(){

char adress[100];
fstream bin;
int count=0;
cin.getline(adress, 100);
  while(count<5)
  {
    bin.open(adress, ios::binary | ios::in | ios::out);
    count++;
    if (!bin)
     continue;
    break;
  }
if(bin) cout<<"File is open"<<endl;
else cout<<"File not open"<<endl;
bin.close();

getch();
return 0;
}
Цитата:
А как сделать, чтобы программа создавала и не висела?
Так вам нужно открыть, или создать?
Цитата:
p.s. А если есть файл *.txt НЕбинарный, а его имя ввожу, то будет работать?
Любой файл можно открыть и как бинарный, и как текстовый.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.05.2009, 20:31   #9
VorobeY1326
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 11
По умолчанию

Спасибо!
Как открыть я вроде бы благодаря вам понял!!
А создать как то возможно также в цикле?

Или тупо создать сначала просто как текстовый, а потом открыть как надо?
VorobeY1326 вне форума Ответить с цитированием
Старый 09.05.2009, 20:37   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Создать так:
Код:
ofstream bin;
int count=0;
cin.getline(adress, 100);
  while(count<5)
  {
    bin.open(adress, ios::binary);
    count++;
    if (!bin)
     continue;
    break;
  }
Ну или так:
Код:
fstream bin;
int count=0;
cin.getline(adress, 100);
  while(count<5)
  {
    bin.open(adress, ios::binary | ios::out);
    count++;
    if (!bin)
     continue;
    break;
  }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Бинарные файлы EwwwA Общие вопросы C/C++ 0 20.04.2009 17:32
Builder C++ бинарные потоки,файлы Yakushov C++ Builder 1 21.12.2008 11:55
бинарные деревья. ribka Помощь студентам 2 30.11.2007 18:13