Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не открывается файл? / 9 сообщений из 9, страница 1 из 1
06.04.2007, 13:11
    #34443265
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
День добрый!
Нижеприведенный пример из книжки:

Код: plaintext
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
#include <iostream>
#include <fstream>
using namespace std;

int get_int(int default_value);
char name[ 20 ];

int main() {
    char filename[ 81 ];
    int n;
    int age;
    int recsize = sizeof(name) + sizeof(int);
    

    cout << "Enter file name: ";
    cin.getline(filename,  80 );

    // Open file for binary read and write.    

    fstream  fbin(filename, ios::binary | ios::in | ios::out);
    if (!fbin) {
        cout << "Could not open file " << filename;
        return - 1 ;
    }

//  Get record number to write to.

    cout << "Enter file record number: ";
    n = get_int( 0 );

    // Get data from end user.

    cout << "Enter name: ";
    cin.getline(name,  19 );
    cout << "Enter age: ";
    age = get_int( 0 );

    // Write data to the file.
 
    fbin.seekp(n * recsize);
    fbin.write(name,  20 );
    fbin.write(reinterpret_cast<char*>(&age), sizeof(int));
    fbin.close();
    return  0 ;
}

// Get integer function
// Get an integer from keyboard; return default
//  value if user enters 0-length string.
//
int get_int(int default_value) {
    char s[ 81 ];

    cin.getline(s,  80 );
    if (strlen(s) ==  0 )
         return default_value;
    return atoi(s);
}


Но при вызове почему-то всегда выдается сообщение, что файл не открыт.
Проверяю дескриптор fbin, так он почему-то всегда = 0.
Где может быть "засада"?

Заранее спасибо.
С уважением
...
Рейтинг: 0 / 0
06.04.2007, 13:21
    #34443305
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
Файло-то существует? Если да - проверь права доступа, ежели нет то в конструкторе надо еще чего-нибудь сказать
...
Рейтинг: 0 / 0
06.04.2007, 13:32
    #34443349
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
Код: plaintext
1.
2.
   fstream  fbin(filename, ios::binary | ios::in | ios::out);
   if (!fbin) 

Вот здесь какой-то бред написан, проверь свою книжку.
...
Рейтинг: 0 / 0
06.04.2007, 13:38
    #34443376
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
Этот пример я с диска, прилагаемого к книге скопирнул.
Что интересно, вот такой пример работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <iostream>
#include <fstream>
using namespace std;

int main() {
    char filename[ 81 ];

    cout << "Enter a file name and press ENTER: ";
    cin.getline(filename,  80 );
    ofstream file_out(filename);
    if (! file_out) {
        cout << "File " << filename << " could not be opened.";
        return - 1 ;
    }
    cout << "File " << filename << " was opened.";
    file_out << "I am Blaxxon," << endl;
    file_out << "the cosmic computer." << endl;
    file_out << "Fear me.";
    file_out.close();
    return  0 ;
}

Т.е. для обычного текста файл создается и открывается, а для binary, при наличии вот этой строки:
Код: plaintext
fstream  fbin(filename, ios::binary | ios::in | ios::out);
получается хрень!
...
Рейтинг: 0 / 0
06.04.2007, 14:42
    #34443668
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
Еще посмотрел. Действительно, если файл существует, то все проходит нормально. Тогда еще вопрос: Почему, в случае, с файлом, куда пишем текст, он (в смысле, файл) создается просто при задании его имени. А в случае с binary файлом нет?
Заранее спасибо.
...
Рейтинг: 0 / 0
06.04.2007, 15:41
    #34443936
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
A.D.Еще посмотрел. Действительно, если файл существует, то все проходит нормально. Тогда еще вопрос: Почему, в случае, с файлом, куда пишем текст, он (в смысле, файл) создается просто при задании его имени. А в случае с binary файлом нет?
Заранее спасибо.
Ты фысшш файл так создаешь
fstream fbin(filename);
тогда посмотри default значение флажков ios
PS Что за книжку читаешь?
...
Рейтинг: 0 / 0
06.04.2007, 15:46
    #34443951
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
http://doks.gorodok.net/?p=262
class ios {
public:
//...
enum open_mode {
in=1, // открыть на чтение
out=2, // открыть как выходной
ate=4, // открыть и переместиться в конец файла
app=010, // добавить
trunc=020, // сократить файл до нулевой длины
nocreate=040, // неудача, если файл не существует
noreplace=0100 // неудача, если файл существует
};
//...
};
...
Рейтинг: 0 / 0
06.04.2007, 15:48
    #34443960
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
"С++ без страха" Оверленда.
...
Рейтинг: 0 / 0
06.04.2007, 15:59
    #34443988
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не открывается файл?
Не читал, но название пугающее
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не открывается файл? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]