2013-02-04 42 views
0

我遇到了关于数据文件的问题,这些数据文件告诉我们编写一个函数来执行任务。在其他所有问题中,我们都会处理固定的文件名称,例如“abc.txt”,因此这些函数不会一概而论。我想知道是否有通过数据文件将在语句中使用的字符串变量的方法:使用字符串作为std :: fstream的文件名。

fstream file("abc.txt",ios::in|ios::out);

,并把它变成:

char str[20]="Newfile.txt"; 
fstream file(str,ios::in|ios::out); 

是否有使用的方式字符串作为文件名与std::fstream?我试过使用一个字符串,但没有创建这样的文件,虽然程序的编译没有显示任何错误。

+1

你碰巧看[性病:: fstream的参考] (http://en.cppreference.com/w/cpp/io/basic_fstream/basic_fstream)? – ChiefTwoPencils

+1

1)术语* string *不明确,最好说* character array *或* std :: string *,2)在输入和输出中使用相同的fstream并不是一个好主意,3)您应该找到一些对于这个基本问题来说,这是很好的参考 - 如果你的课程文本不包含它们 – Beta

回答

6

这取决于编译器。这样的工作始终坚持:

void do_something(std::string const &filename) { 

    std::fstream(filename.c_str()); 
    // ... 
} 

这样可与新的(C++ 11)编译器,而不是旧的:

void do_something(std::string const &filename) { 

    std::fstream(filename); 
    // ... 
} 
+0

好的。但是有没有其他的方法呢?这将在旧版本中工作..?什么可能甚至不使用变量,而是泛化的FN()我做..? – user2038517

+0

@ user2038517:我展示的第一个函数可以让你指定要打开的文件的名称,该函数应该可以在任何C++编译器中工作,除非它极其*古代(即,早于'std :: string')完全)。 –

+1

杰里的第一个解决方案可以在老版本中使用,就像他说的。你不能*推广没有变量的函数 - 它如何知道打开哪个文件? – us2012