Magicaxis Magicaxis - 15 days ago 5
C++ Question

Creating a text file with a timestamp in the title

I'm trying to write a program which outputs a lot of data in separate text files. I want the title of each file to be Poker_Log_timestamp_datestamp.txt
However, it doesn't actually create the file, nor does it throw any errors!

Here's the code:

#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");
}


How do I make this work?
One other thing: If I comment out
filename.append(stime)
and
filename.append(sdate)
, it works fine.

SOLVED :D The file name cant have any slashes or colons, so i replaced them both with dashes. Here is the working code:

#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");
}

Answer

The date and time strings may have characters in them (like colons) that may not be legal characters for your file system.