2013-10-06 2 views
0

Я пытаюсь передать имя документа для открытия в файле fstream, он работает с потоком, но не с fstream.fstream, ofstream, пропуская имя документа, C++

Пример, это работает отлично ...

void TestFunction (ofstream &test,char FileName []){ 
    cout << "test !!!" << endl; 
    test.open(FileName); 
    test << "test test test" << endl; 
    test.close(); 
} 

int main() 
{ 
    ofstream database; 
    char FileName[100]="database.txt"; 

    TestFunction(database, FileName); 
    getchar(); 
    return 0; 
} 

Пример 2, это не создает файл ...

void TestFunction (fstream &test,char FileName []){ 
    cout << "test !!!" << endl; 
    test.open(FileName); 
    test << "test test test" << endl; 
    test.close(); 
} 

int main() 
{ 
    fstream database; 
    char FileName[100]="database.txt"; 

    TestFunction(database, FileName); 
    getchar(); 
    return 0; 
} 

Кто-нибудь есть какие-либо предложения, что я делаю неправильно?

EDIT После еще нескольких поисковых запросов я нашел ответ на свой вопрос, должен ли я удалить свой вопрос сейчас или? c++: ifstream open problem with passing a string for text file name

+0

Я не думаю, что ваша проблема в файле не создается с опубликованным кодом – P0W

ответ

2

Чтобы сделать свою второе Verson работы, вы можете добавить флаг ios_base::out:

void TestFunction (fstream &test,char FileName []){ 
    cout << "test !!!" << endl; 
    test.open(FileName, std::ios::out); 
    //     ^^^^^^^^^^^^ 
    test << "test test test" << endl; 
    test.close(); 
} 

Если вы просто хотите, чтобы написать содержание в файл, вы можете выбрать более конкретную версию, которая std::ofstream.

Потому что basic_ofstream конструктор предназначен для принятия const char* as input parameter, so it doesn't accept std :: string`, однако это изменено в C++ 11.

explicit basic_ofstream(const char* filename, 
       ios_base::openmode mode = ios_base::out); // before C++11 

explicit basic_ofstream(const string& filename,         
       ios_base::openmode mode = ios_base::out); // (since C++11) 
+0

Итак, у меня есть 2 решения сейчас? :) Можете ли вы объяснить мне немного больше? Если я правильно понял, что поток добавляет std :: ios :: out автоматически, а fstream - нет? Почему работает c_str()? – Cokaric

+0

Ummm ... ['fstream open'] (http://en.cppreference.com/w/cpp/io/basic_fstream/open) – P0W

+0

С вторым примером Op я могу создавать и записывать в файл без' std :: ios :: out', open 'fstream' имеет открытый режим по умолчанию, поскольку' ios_base :: in | ios_base :: out' – P0W

Смежные вопросы