读取具有变量名称C++的文件

Read file with variable name C++

本文关键字:C++ 文件 变量名 读取      更新时间:2023-10-16

我正在尝试为不同级别打开不同的文件,需要一个变量名称来执行此操作。我尝试了以下内容,但给出了错误:"没有从字符串到常量字符的合适转换"

void loadMap(){
    //string levelname;
    //levelname = '../Levels/Level' + level;
    FILE *file;
    file = fopen("../Levels/Level" + level + ".txt", "r"); //THIS LINE IS GIVING THE ERROR
    char section[80];
    int index = 0;
    int x = 0;
    int y = 0;
    while(true){
        fscanf(file, "%s", section);
        if(strcmp(section, "[Victor]") == 0){
            while(true){
                fscanf(file, "%d%d%d", &index, &x, &y);
                if(index == -1){
                    break;
                }
                victor.x = x;
                victor.y = y;
            }
        }

。...更多代码

首先

,你应该使用std::ifstream,这是C++的方式(tm)。其次,字符串的串联应该使用标头sstream中的std::stringstream来完成,下面是如何实现这一点的示例:

#include <iostream>
#include <sstream>
#include <fstream>
int main() {
    std::string level = "test";
    std::stringstream ss;
    ss<<"../Levels/Level"<<level<<".txt";
    std::ifstream file(ss.str());
    if(!file.is_open()) {
        // error
    } else {
        // continue
    }
}

"../Levels/Level" + level + ".txt" 被计算为字符串对象,但 fopen() 将 const char* 作为第一个参数。您可以通过以下方式修复它:

fopen(("../Levels/Level" + level + ".txt").c_str(), "r");
FILE *file;
char buf[50];
snprintf(buf, sizeof(buf),"%s%d.txt","../Levels/Level",level);
file = fopen(buf, "r");