2

我正在尝试编写一个在单独的文本文件中输出大量数据的程序。我希望每个文件的标题是Poker_Log_timestamp_datesamp.txt 但是,它实际上并没有创建文件,也不会抛出任何错误!

这是代码:

#include <fstream>
#include <iostream>
#include <ctime>
#include <string>
using namespace std;

int main(){
    char sdate[9];
    char stime[9];
    fstream log;
    _strdate_s(sdate);
    _strtime_s(stime);
    string filename = "Poker_Log_";
    filename.append(stime);
    filename.append("_");
    filename.append(sdate);
    filename.append(".txt");
    cout<<"Filename == "<<filename<<endl;
    log.open(filename.c_str());
    log<<"\n\nHuman won the tournament.\n";
    log.close();
    system("Pause");
}

我该如何进行这项工作?另一件事:如果我注释掉filename.append(stime)and filename.append(sdate),它工作正常。

已解决:D 文件名不能有任何斜杠或冒号,所以我将它们都替换为破折号。这是工作代码:

#include <fstream>
#include <iostream>
#include <ctime>
#include <string>
#include <cstdio>

using namespace std;

int main(){
    char sdate[9];
    char stime[9];
    ofstream log;
    _strdate_s(sdate);
    _strtime_s(stime);
    string filename = "Poker_Log_";
    filename.append(stime);
    filename.append("_");
    filename.append(sdate);
    filename.append(".txt");
    for(int i = 0; i<filename.length(); ++i){
        if (filename[i] == '/' || filename[i] == ':')
            filename[i] = '-';
    }
    log.open(filename.c_str());
    if (log.fail())
        perror(filename.c_str());

    log<<"\n\nHuman won the tournament.\n";
    log.close();
    system("Pause");
}
4

2 回答 2

3

日期和时间字符串中可能包含可能不是文件系统合法字符的字符(如冒号)。

于 2013-03-01T17:30:23.177 回答
2

使用以下内容:

   log.open(filename.c_str());

open方法需要一个char *,也就是一个 C 风格的字符串,而不是一个 C++ std::string

于 2013-03-01T16:12:07.687 回答