Форум программистов, компьютерный форум CyberForum.ru

Не хочет открываться файл - C++

Восстановить пароль Регистрация
 
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
05.06.2012, 10:10     Не хочет открываться файл #1
Всем привет! У меня почему-то не хочет открываться файл. В чем может быть причина? Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <fstream>
using namespace std;
 
int main () {
    char fileName[81];
    int recordNumber;
    int intNumber;
    double doubleNumber;
    char str[100];
 
    fstream file;
    while (true) {
        cout << "Input name of the file: ";
        cin.getline(fileName, 80);
 
        // вот здесь возникает ошибка!
        file.open(fileName, ios::binary | ios::in);
        if (file)
            break;
        else
            cout << "Couldn't open the file.\n";
    }
 
    cout << "Input record number: ";
    cin >> recordNumber;
    cout << "Input integer number: ";
    cin >> intNumber;
    cout << "Input double number: ";
    cin >> doubleNumber;
    cout << "Input string: ";
    cin.getline(str, 99);
 
    file.seekp(recordNumber*sizeof(intNumber)+sizeof(doubleNumber)+sizeof(str));
    file.write(reinterpret_cast<char*>(&intNumber), sizeof(int));
    file.write(reinterpret_cast<char*>(&doubleNumber), sizeof(double));
    file.write(str, sizeof(str));
    file.close();
 
    return 0;
}
Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2012, 10:10     Не хочет открываться файл
Посмотрите здесь:

C++ strtok в си++ не хочет работать
не хочет работать код(((( C++
Почему не хочет создаваться файл? C++
C++ Не работает программа. Не хочет читать файл
C++ Не хочет работать htonl
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 10:17     Не хочет открываться файл #2
Цитата Сообщение от Hagrael Посмотреть сообщение
file.open(fileName, ios::binary | ios::in);
Это поток! Он по определению текстовый.
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
05.06.2012, 11:36     Не хочет открываться файл #3
Первое, что бросилось в глаза, вы записываете в файл в конце программы, а бит режима записи в файл ios::out не выставлен, вместо него зачем-то выставлен ios::in.
taras atavin, вообще не понял, к чему ты это сказал
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 11:37     Не хочет открываться файл #4
К бинарнику.
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
05.06.2012, 12:01     Не хочет открываться файл #5
taras atavin, что-то я все равно не уловил вашу мысль. Может быть вы хотели сказать, что поток по умолчанию открывается в текстовом режиме? Ну так за этим мы и меняем его, выставляя соответствующий бит ios::binary. Кстати, еще одно замечание
Hagrael, у вас, в строчке, где вы высчитываете смещение слегка не хватает скобок:
C++
1
file.seekp(recordNumber*(sizeof(intNumber)+sizeof(doubleNumber)+sizeof(str)));
Как-то так, наверное.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 12:06     Не хочет открываться файл #6
Vergil111, я имею ввиду, что поток придуман не для того, чтоб через него сикать. Поток сам следит за текущей позицией в файле и при каждом выводе оператором << смещает её автоматически. И я также имею ввиду, что бинарник к этому оператору в принципе не прикручивается.
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
05.06.2012, 12:19     Не хочет открываться файл #7
taras atavin, да ты прав. Просто я подумал, то что автор выложил кусок некоторой программы, где запись в файл идет непоследовательно, то есть скажем сначала идут записи 0, 2, потом я хочу записать запись с номером 1, и именно тогда мне понадобится оператор seekp. А в данном контексте он действительно не нужен и я удивляюсь, зачем автор выбрал fstream, а не ofstream, если он производит только запись в файл.
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
05.06.2012, 14:02  [ТС]     Не хочет открываться файл #8
Всем спасибо за ответы!
Цитата Сообщение от Vergil111 Посмотреть сообщение
Первое, что бросилось в глаза, вы записываете в файл в конце программы, а бит режима записи в файл ios::out не выставлен, вместо него зачем-то выставлен ios::in.
Вначале у меня было ios::binary | ios::in | ios::out, но потом, когда я обнаружил, что файл не открывается, стал менять значение этого аргумента. Но файл как не открывался, так и не открывается.
Цитата Сообщение от Vergil111 Посмотреть сообщение
Hagrael, у вас, в строчке, где вы высчитываете смещение слегка не хватает скобок
Да, точно, спасибо.
Цитата Сообщение от Vergil111 Посмотреть сообщение
Просто я подумал, то что автор выложил кусок некоторой программы, где запись в файл идет непоследовательно, то есть скажем сначала идут записи 0, 2, потом я хочу записать запись с номером 1, и именно тогда мне понадобится оператор seekp
Все именно так
Цитата Сообщение от Vergil111 Посмотреть сообщение
я удивляюсь, зачем автор выбрал fstream, а не ofstream, если он производит только запись в файл
fstream выбрал, потому что в учебнике так написано

Но проблема осталась - файл не открывается. Я пробовал создавать файл, а потом открывать его, но так же безуспешно.
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
05.06.2012, 18:03     Не хочет открываться файл #9
Если у вас были выставлены биты ios::in|ios::out|ios::binary, то файл уже должен был существовать, в противном случае он не будет создан. Для создания файла необходимо указать, что либо мы затираем и создаем новый файл, тогда вы выставляете бит режима ios::trunc или выставить бит режима ios::app для дозаписи, если файл уже существовал (в противном случае файл будет создан). Второй вариант, я думаю, больше подходит для вашей задачи
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
06.06.2012, 10:53  [ТС]     Не хочет открываться файл #10
Vergil111, спасибо, проблема решена!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.06.2012, 13:05     Не хочет открываться файл #11
Цитата Сообщение от Hagrael Посмотреть сообщение
Все именно так
Тогда зачем тебе поток? Юзай обычный FileOpen.
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
15.06.2012, 10:32  [ТС]     Не хочет открываться файл #12
taras atavin, хочется для начала с потоком попробовать. Очень странно, что такой код выдает единицу:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <fstream>
using namespace std;
 
int main () {
    fstream file("text.txt", ios::trunc | ios::in);
    cout << file.fail();
    file.close();
 
    return 0;
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2012, 10:41     Не хочет открываться файл #13
Странно то, что пытаетесь отрыть файл для чтения, и хотите при открытии очистить его?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2012, 10:47     Не хочет открываться файл
Еще ссылки по теме:

C++ Не хочет создавать файл без полного пути
Заголовочный файл .h не хочет подключаются C++
C++ SFML: не хочет грузиться файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
15.06.2012, 10:47  [ТС]     Не хочет открываться файл #14
soon, точно))) Спасибо
Yandex
Объявления
15.06.2012, 10:47     Не хочет открываться файл
Ответ Создать тему
Опции темы

Текущее время: 00:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru