我想使用我从计算机获得的系统日期并将其用作 .txt 文件的名称。这是我到目前为止所拥有的:
void idle_time()
{
LASTINPUTINFO last_info;
last_info.cbSize = sizeof(LASTINPUTINFO);
int tickCount = 0;
int minutes = 0;
int count = 0;
SYSTEMTIME a;
while(true)
{
GetLastInputInfo(&last_info);
tickCount = GetTickCount();
int minutes = (tickCount - last_info.dwTime) / 60000;
count++;
string date;
date += a.wMonth;
date += "/";
date += a.wDay;
date += "/";
date += a.wYear;
if((minutes >= 1) && (count%3000==0))
{
//std::string filename = date;
//filename += ".txt";
ifstream in(string(date + ."txt").c_str());
float sum;
in >> sum;
sum++;
in.close();
ofstream out(string(date + ".txt").c_str());
out << sum;
out.flush();
out.close();
}
对于糟糕的缩进,我深表歉意。这位编辑没有做到公正。但无论如何,我将如何使用日期作为文件名?
最佳答案
您使用的date
字符串包含/
字符,用于分隔路径中的目录。您只需将它们替换为另一个(非禁止的)字符。
我还建议您不要对文件名使用 m/d/Y
日期格式。他们排序不好。 Y-m-d
通常更好,因为文件将从最旧到最新排序。
编辑:啊,要使我最后的陈述属实,您还需要用零到两位数填充月份和日期,即类似 2011-08- 05
。
啊,我看到时间附加也做错了。你不能像那样将整数附加到字符串。 @hmjd 已经向您发布了一种解决此问题的方法;但我认为只使用专用的时间->字符串转换方法会更好。
我不是 Windows 程序员,所以我不会在 SYSTEMTIME
方面帮到你太多。您可能需要使用 GetTimeFormat() .但这里有一个简单的示例,说明如何使用标准 C/C++ 解决它 strftime() :
char date_buf[11];
time_t a = time(0);
strftime(date_buf, sizeof(buf), "%Y-%m-%d", gmtime(&t));
date += buf;
如果您想要本地时区而不是 UTC 的日期,请使用 localtime()
而不是 gmtime()
。
希望对大家有帮助。我相信 GetTimeFormat()
的工作原理类似,所以也许这可以为您提供一些指导。
关于c++ - 带有 ifstream 和 ofstream 的可变文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728948/