| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 555 人关注过本帖
标题:如何通过字符串新建文件
只看楼主 加入收藏
penguinc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-24
收藏
 问题点数:0 回复次数:7 
如何通过字符串新建文件
程序代码:
#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")可以生成文件。。。
搜索更多相关主题的帖子: 字符串 如何 新建 
2013-03-13 23:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
你这样子要不得呀
首先,这代码编译失败,因为outfile根本没定义
其实,是否能文件成功,你自己可以手工试验一下呀,比如你手工创建一个文件名为“Thu Mar 14 08:19:30 2013.cpp”的文件试试
2013-03-14 08:23
penguinc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-24
收藏
得分:0 
回复 2楼 rjsp
因为前面还有一堆代码没有贴上来(不然就不会有<vector>的头文件了)。忘记把outfile的定义加上去了。
ofstream outfile;


测试结果是,用cout输出的filename_new确实是我想要的路径+文件名,但是文件没有被创建……
2013-03-14 09:19
penguinc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-24
收藏
得分:0 
想了想,还是把全代码贴上来吧……不过之前的代码是测试过没问题的,问题还在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();
}



2013-03-14 09:39
penguinc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-24
收藏
得分:0 
filename.dat:

main.cpp
test.cpp


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

应该不难猜整个代码是想要做什么吧……
2013-03-14 09:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
米分

DO IT YOURSELF !
2013-03-14 09:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
楼主呀,你还是把我在2楼说的话看一遍吧
你手工创建一个文件名为“Thu Mar 14 08:19:30 2013.cpp”的文件试试
看看系统告诉你什么
2013-03-14 09:54
penguinc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-24
收藏
得分:0 
回复 7楼 rjsp
明白了,万分感谢rjsp~  

文件名里面是不能包含':'的,所以我作了一个简单的替换:
程序代码:
    for(string::iterator iter = timestamp.begin(); iter != timestamp.end(); ++iter)
    {
        if(*iter == ':')
            *iter = ' ';
    }
2013-03-14 11:44
快速回复:如何通过字符串新建文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019892 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved