2011-03-19 12 views
9

私はVisual C++ 2008を使用しています。 テキストファイルを作成して書き込みたいと思います。ここでテキストファイルを作成して書き込む

char filename[]="C:/k.txt"; 
FileStream *fs = new FileStream(filename, FileMode::Create, FileAccess::Write); 
fstream *fs =new fstream(filename,ios::out|ios::binary); 
fs->write("ghgh", 4); 
fs->close(); 

次の2つの異なる方法で二回fsを宣言しているので、あなたがエラーを取得するFILESTREAM

+0

投稿を編集し、正確なエラーメッセージを追加してください。また、完全なコード(適切にフォーマットされ、ヘッダー付き)が役に立ちます。 – Mat

+0

@user: 'FileStream'はどこから来たのですか?なぜ2つのストリームを作成していますか?なぜストリームを動的に作成していますか? C++に切り替えたJavaプログラマですか? –

+1

FileStream?これは.NETクラスの権利ですか? C++をやろうとしていますか?またはC++/CLI? –

答えて

12

のエラーを示しています。 C++とC++/CLIの奇妙な組み合わせなので、私はそのコードの何も保持しません。

標準C++またはC++/CLIを実行するかどうかは不明ですが、あなたは「通常の」C++をしたいと仮定すると、あなたが実行する必要があります。非常に多くの場合、あなたはC++でそれを必要としないので、私はすべてのnewものを取り除くこと

#include <fstream> 
#include <iostream> 

// ... 

int main() 
{ 
    // notice that IIRC on modern Windows machines if you aren't admin 
    // you can't write in the root directory of the system drive; 
    // you should instead write e.g. in the current directory 
    std::ofstream fs("c:\\k.txt"); 

    if(!fs) 
    { 
     std::cerr<<"Cannot open the output file."<<std::endl; 
     return 1; 
    } 
    fs<<"ghgh"; 
    fs.close(); 
    return 0; 
} 

お知らせ - あなただけのスタック上にストリームオブジェクトを割り当てることができますがと通常の(非GCで管理されていない)ポインタはガベージコレクションを受けないので、コードに存在していたメモリリークを忘れてしまいます。

ここ
+3

can *と[スタックにただ割り当てよう] –

3

は、両方のネイティブのための例があり、C++を管理:

あなただけの罰金ネイティブソリューション、次の作品に満足していると仮定:

fstream *fs =new fstream(filename,ios::out|ios::binary); 
fs->write("ghgh", 4); 
fs->close(); 
delete fs;  // Need delete fs to avoid memory leak 

しかし、私はfstreamのために動的メモリを使用していないだろうオブジェクト(つまり、新しいステートメントとポイント)。ここでは新しいバージョンです:

fstream fs(filename,ios::out|ios::binary); 
fs.write("ghgh", 4); 
fs.close(); 

EDITは、問題は、ネイティブのソリューションを(もともとは不明であった)を要求するために編集されたが、それは誰かに有用であり得るように私はこの答えを残して

C++ CLIオプション(マネージコード用)をお探しの場合は、FileStreamの代わりにStreamWriterを使用することをお勧めします。 StreamWriterを使用すると、マネージ文字列を操作できます。 deleteはIDisposableインターフェイス上でDisposeメソッドを呼び出し、収集されるガベージコレクションは最終的にメモリを解放します。

StreamWriter ^fs = gcnew StreamWriter(gcnew String(filename)); 
fs->Write((gcnew String("ghgh"))); 
fs->Close(); 
delete fs; 
-3

テキストを作成します。彼にそれを送信したいかどうかを尋ねます。彼が「はい」と答えた場合、これは、この特定のメッセージを送信メッセージとしてタグ付けする必要があり、そうでなければ受信メッセージでなければならないことを意味します。

+1

質問は明らかに '.txt'ファイルであり、SMSメッセージではありません。この回答のテキストファイルやVisual C++ 2008に関連するものはありません。 –

+0

@Amad Munirその回答を投稿するときに考えていたことは何ですか? –