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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
#1

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

05.06.2012, 10:10. Просмотров 722. Ответов 13
Метки нет (Все метки)

Всем привет! У меня почему-то не хочет открываться файл. В чем может быть причина? Вот код:
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++
Если в тексте программы указать путь и имя файла, то файл создаваться не хочет, char destination=&quot;d:\aaa.txt&quot;; fopen(destination,&quot;w&quot;); ...

Заголовочный файл .h не хочет подключаются - C++
Вообщем у меня такая проблема, есть простенькая программа, которая вычисляет массу тела по ф-ле P=M*g: #include&lt;iostream.h&gt; ...

Не работает программа. Не хочет читать файл - C++
Нехочет читать файл, пишет error C2660: 'fopen_s' : function does not take 2 arguments #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; ...

Не хочет создавать файл без полного пути - C++
Здравствуйте. Вот не могу понять в чем дело: std::ofstream outfile; //откроем файл для записи в бин режиме ...

Не хочет работать - C++
#include&lt;time.h&gt; #include&lt;stdlib.h&gt; using namespace std; int main() { setlocale(0, &quot;&quot;); int a; int n; int i, j,count =...

НЕ хочет компилировать - C++
Найдите пожалуйста ошибку, и можете объяснимть почему void mul( int x, int y) ставнять не в фигурные скобки?(код с Herbert Schild) ...

Макрос не хочет работать - C++
Привет всем! У меня не компилируется проект, ошибка, мб кто-то подскажет что не так, т.к. задача простая, но от чего-то у меня она не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ушёл с форума.
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
Ушёл с форума.
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
БТР - мой друг
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
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
06.06.2012, 10:53  [ТС]     Не хочет открываться файл #10
Vergil111, спасибо, проблема решена!
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.06.2012, 13:05     Не хочет открываться файл #11
Цитата Сообщение от Hagrael Посмотреть сообщение
Все именно так
Тогда зачем тебе поток? Юзай обычный FileOpen.
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
2538 / 1303 / 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     Не хочет открываться файл
Еще ссылки по теме:

Не хочет работать htonl - C++
На одной машине собирает проект нормально. На другой выдает ошибку error LNK2001: unresolved external symbol __imp__htonl@4 ругается...

чего хочет компилятор? - C++
const double radius = 5.0; struct point { double x; double y; }; double distance(point p1, point p2) { return...

Не хочет реализоваться класс - C++
class sell { public: int tt(void) { return 1; } }; class test

strtok в си++ не хочет работать - C++
надо разбить строку на лексеммы, но почему-то не идет дело, не подскажете почему? У меня MasString содержит строки: Best scores: 1)...

не хочет работать код(((( - C++
#include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include &lt;limits.h&gt; #include &lt;locale.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru