【问题标题】:Using a string as a file name with std::fstream. [closed]在 std::fstream 中使用字符串作为文件名。 [关闭]
【发布时间】:2013-01-18 18:56:11
【问题描述】:

我遇到了关于数据文件的问题,这些问题告诉我们编写一个函数来做事。在所有其他问题中,我们处理固定文件名,例如“abc.txt”,因此这些函数没有通用化。我想知道是否有一种方法可以让数据文件在语句中使用字符串变量:

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

并把它变成:

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

有没有办法将字符串用作std::fstream 的文件名?我尝试使用字符串,但没有创建这样的文件,尽管程序的编译没有显示任何错误。

【问题讨论】:

  • 你有没有碰巧看到std::fstream reference
  • 1) 术语string 有歧义,最好说character arraystd::string, 2 ) 使用相同的 fstream 进行输入和输出很少是一个好主意,3) 如果您的课程文本没有涵盖这些基本问题,您应该找到一些很好的参考。

标签: c++ text-files file-handling


【解决方案1】:

这取决于编译器。这种方式始终如一:

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

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

这种方式适用于新的 (C++11) 编译器,但不适用于旧的:

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

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

【讨论】:

  • 好的.. 但是有没有其他的方法呢?哪个适用于旧版本..?甚至可能不使用变量而是概括我制作的 fn() 的东西..?
  • @user2038517:我展示的第一个函数是一个让您指定要打开的文件的名称的函数,它应该适用于任何 C++ 编译器,除非它是极度痛苦古老的(即,早于std::string 的发明)。
  • Jerry 的第一个解决方案适用于旧版本,正如他所说的那样。你不能泛化没有变量的函数——它怎么知道要打开哪个文件?
  • 如果你不想要一个变量只是硬编码它? std::fstream("hello.txt");
  • @user1520427,它在问题中说,重点是它是通用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2015-03-16
  • 1970-01-01
相关资源
最近更新 更多