使用变量在c ++中打开文件

时间:2014-02-21 23:07:33

标签: c++ file file-io

需要帮助使用变量和字符串组合

使用infile.open()打开文件
ifstream infile;
infile.open("data_x.txt");

我需要这样的东西,但data_X.txt中的X必须是可以更改的变量。

2 个答案:

答案 0 :(得分:3)

使用C ++,您可以使用字符串流

std::ostringstream file_name;
file_name << "data_" << somevar;

infile.open(file_name.str());

答案 1 :(得分:0)

我不知道我是否理解你的问题。你需要打开一个名为“something_X.txt”的文件,但是有可能用某个变量的值替换“X”吗?如果是这样的话:

template <typename T>
ifstream read_file(const char* baseName, const T& value, const char* extension)
{
  std::ostringstream file_path;          // Here we will assemble our name
  file_path<<baseName<<value<<extension; // Add baseName, value and extension.

  ifstream file_handle(file_path.str()); // Open the file.
  if(!file_handle)
  {
    //This file doesn't exist! Notify user in some way.
  }

  return file_handle; // Return handle to file we have opened.
}

现在你可以做到:

file_1 = read_file("data_", 5, ".txt"); //Opens "data_5.txt"
file_2 = read_file("personal", "info", ".ini"); //Opens "personalinfo.ini"

我提供了一个更通用的解决方案,因此您可以自定义名称的常量前缀(在特定情况下为“data_”)和文件扩展名。示例:此循环将打开“texture_1.jpg”,“texture_2.jpg”,...,“texture_10.jpg”。

const char* base_name = "texture_";
const char* extension = ".png";
for(int i = 1; i <= 10; ++i)
{
  ifstream tex_file = read_file(base_name , i, extension);
  //read data from this file
  tex_file.close();
}

由于函数是模板化的,你可以使用任何类型为T的变量,其中有一个有效的运算符&lt;&lt;(ostringstream&amp;,const T&amp;) - 所有内置类型都满足这个要求。详情请点击此处:cplusplus.com: operator<<