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();
ここにFileStreamのエラーが表示されています
fs
を2つの異なる方法で2回宣言しているため、エラーが発生します。しかし、C++とC++/CLIの奇妙な組み合わせであるため、そのコードは一切保持しません。
あなたの質問では、標準のC++を実行するか、C++/CLIを実行するかが明確ではありません。 「通常の」C++が必要だとすると、次のようにする必要があります。
#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;
}
C++では不要なため、new
のすべてを削除したことに注意してください。通常のように、スタックにストリームオブジェクトを割り当てて、コードに存在していたメモリリークを忘れることができます。 (GCで管理されていない)ポインターはガベージコレクションの対象ではありません。
ネイティブとマネージの両方の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();
編集、質問はネイティブソリューションを要求するように編集されました(当初は不明確でした)が、誰かに役立つ可能性があるため、この回答は残しておきます
C++ CLIオプション(マネージコード用)を探している場合は、FileStreamではなくStreamWriterを使用することをお勧めします。 StreamWriterを使用すると、マネージ文字列を操作できます。 deleteはIDisposableインターフェイスのDisposeメソッドを呼び出し、Garbage Collectedは最終的にメモリを解放することに注意してください。
StreamWriter ^fs = gcnew StreamWriter(gcnew String(filename));
fs->Write((gcnew String("ghgh")));
fs->Close();
delete fs;