ifstream和ofstream的可变文件名

时间:2012-07-30 20:18:52

标签: c++ date filenames ofstream

我想使用计算机中的系统日期,并将其用作.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();

    }

我很抱歉这个可怕的缩进。这位编辑不公正。但无论如何,我如何使用日期作为文件名?

1 个答案:

答案 0 :(得分:2)

您使用的date字符串包含/个字符,用于分隔路径中的目录。您只需要用另一个(非禁止的)角色替换它们。

我还建议您不要将m/d/Y日期格式用于文件名。他们排序不好。 Y-m-d通常更好,因为文件将从最旧到最新排序。

编辑:啊,并且为了我的上一个陈述是真的,你还需要用0到2位填充月和日,即类似2011-08-05。< / p>


啊,我看到附加的时间也不正确。你不能将整数附加到这样的字符串。 @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()的工作方式类似,所以也许这可以指导你一点。