我正在使用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的错误
答案 0 :(得分:14)
您收到错误是因为您以两种不同方式声明了fs
两次;但我不会保留任何代码,因为它是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;
}
请注意,我删除了所有new
内容,因为在C ++中通常不需要它 - 您只需在堆栈上分配流对象并忘记代码中存在的内存泄漏,因为普通(非GC管理的)指针不会被垃圾收集。
答案 1 :(得分:4)
以下是本机和托管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选项(对于托管代码),我建议使用StreamWriter而不是FileStream。 StreamWriter将允许您使用托管字符串。请注意,delete将在IDisposable接口上调用Dispose方法,而Garbage Collected将最终释放内存:
StreamWriter ^fs = gcnew StreamWriter(gcnew String(filename));
fs->Write((gcnew String("ghgh")));
fs->Close();
delete fs;
答案 2 :(得分:-4)
你创建了一个文本。询问用户是否要发送它。如果他说是,这意味着此特定邮件应标记为发件箱邮件,否则应该是收件箱邮件。