2016-11-02 7 views
-1

fstreamを使用してファイルを作成するためにこのプログラムを作成しました。出力にファイルが作成されたかどうかが示されます。 CodechefC++シェルなど、いくつかのオンラインコンパイラで実行しました。コンパイラはこのプログラムを正常にコンパイルしましたが、出力ファイルが作成されたというエラーの代わりに出力されません。 これは開発ツールによる可能性がありますか?ファイルを作成するためのC++(ファイルとストリーム)プログラムのエラー

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    fstream file; 

    file.open("a.txt"); 
    if(!file) 
    { 
     cout<<"Error in creating file!!!"; 

    } 
    else 
    { 
     cout<<"File created successfully."; 
     file.close(); 
    } 
} 
+0

どのオペレーティングシステム?コンパイラは何ですか?どのようなコンパイルオプション? –

+1

ファイルが実行可能ファイルと同じフォルダにないように見えるので、ファイルを開くことができません。また、多くのオンラインコンパイラは、リテラルの代わりにコマンドライン引数を使用します。 – tinstaafl

答えて

1

fstream constructoropen functionデフォルトでは、読み取り/書き込み用にオープン:後

は、このプログラムのためのコードです。このモードで開くには、ファイルがすでに存在している必要があります。代わりに、書き込み用にオープン:ファイルが存在しない場合

file.open("a.txt", ios::out); 
2

fstream.open()は失敗します。それは

file.open("a.txt", ios_base::out); 

したり、プログラムの動作は、おそらくoperating systemによってれるofstream

ofstream file; 
file.open("a.txt"); 
+0

'ofstream'も良い提案です。 –

0

を使用存在しない場合は、ファイルを作成するには 。あなたがそれらについてもっと知りたいのであれば、Operating Systems: Three Easy Piecesを読んでください。おそらく現在のworking directoryには、既に書き込まれるファイルが含まれているか、適切な権限を持っていない可能性があります(ファイルを作成するには書き込み可能である必要があります)。詳細は、オペレーティングシステム(おそらくfile system)に固有です。 IIRCでは、いくつかのOS(Windows)は、すでに他のプロセスによって開かれているファイルを開くことを禁止しています。

Linuxでは、strace(1)を使用して、どのシステムコールが失敗したかを知ることができます(実際には、特定のプログラムによって実行されたすべてのsystem callsまたはprocess)。

は、これは[おそらく] は常に(しかしsync_with_stdioを参照)C++標準で保証されていませんが、多くのC++標準ライブラリは、上記されている(ととの互換性)errno(3)を設定し、C標準ライブラリは(もstrerror(3)perror(3)を参照してください。.. 。)on 失敗;あなたは試してみてください:もちろん

fstream file; 

file.open("a.txt", ios::out); 
if (!file) { 
    // perror("a.txt"); 
    cout<<"Error in creating file!!!" << strerror(errno) << endl; 
} 

を、他の回答は、あなたがopenための正しいモードを必要とする(this & that)あなたに言ったよう...

も参照std::system_error

+0

質問は、ファイルを作成しようとしていると言います。 –

関連する問題