在C++中写入用户指定的文件

Write to user specified file in C++

本文关键字:文件 用户 C++      更新时间:2023-10-16

我可以指定要在C++中写入的文件吗?我希望能够键入文件名并写入该文件。当我尝试制作myfile.open("example.txt") myfile.open(var)时,我得到了一个大错误。。。

错误:对"std::basic_ofstream>::open(std::string&)"的调用没有匹配的函数/usr/include/c++/4.2.1/fstream:650:注意:候选为:void std::basic_ofstream&lt_CharT,_Traits>::打开(const char*,std::_Ios_Openmode)[其中_CharT=char,_Trait=std::char_Traits]

你能理解这一点吗?或者解释一下我做错了什么?我觉得这很简单,因为这是我使用C++的第一周。

如果var是std::字符串,请尝试:

myfile.open(var.c_str());

错误告诉你到底出了什么问题,尽管命名的模板类型的精度并不能帮助你清楚地知道。看看.open()的引用。它使用const char *作为文件名,以及另一个可选的模式参数。你传递的不是const char *

正如错误所说,它试图用字符指针匹配参数,而std::string不是字符指针。但是std::string::c_str()将返回一个。

尝试:

myfile.open(var.c_str());

简而言之,是的,您可以指定一个文件以多种不同的方式打开和写入。如果你使用的是fstream,并且想要写出纯文本,这是一种方法:

#include <string>
#include <fstream>
int main()
{
  std::string filename = "myfile.txt";
  std::fstream outfile;
  outfile.open( filename.c_str(), std::ios::out );
  outfile << "writing text out.n";
  outfile.close();
  return 0;
}

varstd::string吗?如果是这样的话,您应该传递var.c_str(),因为.open()的变体不需要std::string

您的变量是stringchar[]还是char*?我认为open()方法想要一个c风格的字符串,它应该是char[]char*,所以当你传入它时,你需要在字符串上调用.c_str()方法:

myfile.open(var.c_str());

open调用还有第二个参数。它应该像myfile.open("example.txt",fstream::out)

错误消息非常清楚。它说:basic_ofstream类(您的文件对象)没有一个名为"open"的成员函数,并且只接受一个类型为string(您的var)的参数。您需要从string转到const char *——为此,您使用var.c_str()