C ++保存文本文档

时间:2015-04-18 04:13:28

标签: c++ visual-studio-2010 fstream documents

我一直在处理我的游戏,我可以轻松保存我的文本文档,一切都很完美。我的问题是,如何将文本文档保存到名为"保存的文件中。"这是我的代码。

另外!我从

获取char *名称的输入
Save(gets(new char [50]));

为什么这个代码在这里工作?

char* newArray = new char[strlen("PaintAPicture/")+strlen("Saves/")+strlen(name)+strlen(".asciip")+1];
        strcpy(newArray,"PaintAPicture/");
        strcpy(newArray,"Saves/");
        strcpy(newArray,name);
        strcat(newArray,".asciip");

我接受了你所说的关于使用字符串的内容,但它没有创建文件,我收到了“保存失败,主要问题”错误。

if(saveFile)
    {
        system("cls");
        string prename;
        cout << "Enter level's number: ";
        cin >> prename;
        string name = "Files/" + "Saves/" + prename + ".asciip";

        ofstream out(name, ios::binary);
        if (!out.is_open()){ MessageBox( 0, "Saving failed! Main problem.", 0, MB_ICONERROR); system("cls"); RedrawMap(); return 0; }

        system("cls"); cout << "Saving...";


        system("cls");
        ShowConsoleCursor(false);
        cout << "Saving...";
        Sleep(1000);

        for(int i = 9; i < SizeY; i++)
        {
            for(int j = -1; j < SizeX; j++)
            {
                out << Map[i][j].ch << endl;
                out << (int)Map[i][j].color << endl;
            }
        }
    }

    cout << '\a';
    out.close();
}

1 个答案:

答案 0 :(得分:1)

在文件名前加上&#34;保存/&#34;

char* newArray = new char[strlen("Saves/")+strlen(name)+strlen(".asciip")+1];
strcpy(newArray,"Saves/");
strcat(newArray,name);
strcat(newArray,".asciip");

std :: string类也用于存储和操作字符串。比C字符串更容易使用,更容易出错。 Info on string.

编辑: 你的第一段代码

char* newArray = new char[strlen("PaintAPicture/")+strlen("Saves/")+strlen(name)+strlen(".asciip")+1];
    strcpy(newArray,"PaintAPicture/");
    strcpy(newArray,"Saves/");
    strcpy(newArray,name);
    strcat(newArray,".asciip");

因为你使用strcpy你应该使用strcat而无法工作。

strcpy(newArray,"Saves/");
strcpy(newArray,name);

应该是

strcat(newArray,"Saves/");
strcat(newArray,name);

至于创建文件的问题,这些文件夹是否已存在? ofstream可以为指定的文件夹创建新文件,但无法创建新文件夹。见https://stackoverflow.com/a/9089919/4761271