2013-06-23 5 views
1

Я пытаюсь изучить динамический доступ к файлам. Мой код выглядит следующим образом:fstream не создает новый файл

int main() 
{ 
    dtbrec xrec; // class object 
    fstream flh; 

    // Doesn't create a new file unless ios::trunc is also given. 
    flh.open("database.txt", ios::in | ios::out | ios::binary); 

    flh.seekp(0,ios::end); 
    xrec.getdata(); 
    flh.write((char*)&xrec, sizeof(dtbrec)); 

    flh.close(); 
} 

Я думал, что fstream по умолчанию создает новый файл «database.txt», если он не существует. Любые идеи относительно того, что может быть неправильным?

+1

Добро пожаловать в переполнение стека! Этот вопрос задан раньше: http://stackoverflow.com/questions/8835888/stdfstream-doesnt-create-file?rq=1 –

+0

попробуйте использовать 'ofstream' –

+0

@ThomWiggers ничего себе, спасибо, но если ios :: in is не указано, как хранятся данные в файле? –

ответ

8

Некоторые указатели o fstream:

a. Если вы используете обратную косую черту для указания каталога, например, при использовании fstream f;

f.open ("папка \ файл", ios :: out);

он не будет работать, обратный слеш должен предшествовать обратный слэш, так что правильный путь будет:

f.open («папка \\ файл», ИОС ::вне);

b. Если вы хотите создать новый файл, это не будет работать:

f.open ("file.txt", ИОС :: в | ИОС :: из | ИОС :: бинарные);

правильный путь будет сначала создать файл, используя либо Ios :: вне или ИОС :: TRUNC

f.open ("file.txt". ИОС :: Нет) или f.open ("file.txt", ios :: trunc);

, а затем

f.open ("file.txt", ИОС :: в | ИОС :: из | ИОС :: бинарные);

c. Наконец, это может быть в этом порядке, как указано в этом ответе, fstream not creating file

В основном, ios :: in требует наличия уже существующего файла.

+1

Ваши примеры показывают косые черты, а не обратные косые черты. Вам не нужно скрывать косые черты. – Buge

+0

Спасибо Buge Я отредактировал его, я использовал люфт, когда узнал о fstream. В то время как я знаю и преимущественно использую прямую косую черту, мне не понравится редактировать контент (используя обратную косую черту), поскольку я лично считаю, что изначально во время обучения fstream этот пост может быть полезен, особенно для новичков, однако ваш комментарий может оказаться полезным для их также –

1

Попробуйте использовать ofstream, он автоматически создает файл, если он еще не существует. Или, если вы хотите делать как вход, так и вывод в потоке, попробуйте использовать fstream, но вам не нужно указывать ios::in|ios::out|ios::binary, потому что fstream автоматически настроит его для вас.