注册 登录
编程论坛 C++教室

如何通过字符串新建文件

penguinc 发布于 2013-03-13 23:35, 555 次点击
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <ctime>

using namespace std;

int main()
{
    time_t t;
    t = time(&t);
    string timestamp = ctime(&t);
    timestamp.erase(timestamp.end()-1);
    timestamp += ".cpp";
    cout << timestamp << endl;
    const string address_path = "d:\\";
    string filename_new = address_path + timestamp;

    cout << filename_new;
    outfile.open(filename_new.c_str());
    outfile << "this";
    outfile.close();

}

按理说不是应该在该路径下新建cpp文件的吗?为什么没有文件?如果直接用outfile.open("c:\\a.cpp")可以生成文件。。。
7 回复
#2
rjsp2013-03-14 08:23
你这样子要不得呀
首先,这代码编译失败,因为outfile根本没定义
其实,是否能文件成功,你自己可以手工试验一下呀,比如你手工创建一个文件名为“Thu Mar 14 08:19:30 2013.cpp”的文件试试
#3
penguinc2013-03-14 09:19
回复 2楼 rjsp
因为前面还有一堆代码没有贴上来(不然就不会有<vector>的头文件了)。忘记把outfile的定义加上去了。
ofstream outfile;


测试结果是,用cout输出的filename_new确实是我想要的路径+文件名,但是文件没有被创建……
#4
penguinc2013-03-14 09:39
想了想,还是把全代码贴上来吧……不过之前的代码是测试过没问题的,问题还在1楼的代码里。要是有“too stupid”的问题也欢迎指出~
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <ctime>

using namespace std;

int main()
{
    ifstream infile;
    infile.open("filename.dat", ios::app);
    if(!infile) cout << "Bad!";
    string line;
    vector<string> filename_vec;
    while(getline(infile, line))
    {
        filename_vec.push_back(line);
    }

    vector<string>::iterator filename_iter = filename_vec.end() - 1;
    const string filename_old = *filename_iter;
    infile.close();

    infile.open(filename_old.c_str(), ios::app);
    if(!infile) cout << "Bad!";
    vector<string> oldfilecontent_vec;
    while(getline(infile, line))
    {
        oldfilecontent_vec.push_back(line);
    }
    infile.close();

    ofstream outfile;

    time_t t;
    t = time(&t);
    string timestamp = ctime(&t);
    timestamp.erase(timestamp.end()-1);
    timestamp += ".cpp";
    cout << timestamp << endl;
    const string address_path = "d:\\";
    string filename_new = address_path + timestamp;

    cout << filename_new;
    outfile.open(filename_new.c_str());
    outfile << "this";
    outfile.close();
}



#5
penguinc2013-03-14 09:42
filename.dat:

main.cpp
test.cpp


-----------------------------
test.cpp里是一个标准的hello world 程序

应该不难猜整个代码是想要做什么吧……
#6
wp2319572013-03-14 09:47
米分
#7
rjsp2013-03-14 09:54
楼主呀,你还是把我在2楼说的话看一遍吧
你手工创建一个文件名为“Thu Mar 14 08:19:30 2013.cpp”的文件试试
看看系统告诉你什么
#8
penguinc2013-03-14 11:44
回复 7楼 rjsp
明白了,万分感谢rjsp~  

文件名里面是不能包含':'的,所以我作了一个简单的替换:
程序代码:

    for(string::iterator iter = timestamp.begin(); iter != timestamp.end(); ++iter)
    {
        if(*iter == ':')
            *iter = ' ';
    }
1