c++ - 带有 ifstream 和 ofstream 的可变文件名

标签 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();

    }

对于糟糕的缩进,我深表歉意。这位编辑没有做到公正。但无论如何,我将如何使用日期作为文件名?

最佳答案

您使用的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/

相关文章:

python - “元组”对象没有属性 'replace'

c - 将完整文件名拆分为多个部分

c++ - 在 C++ 中放置内联函数的最佳实践

c++ - 从另一个线程中删除对齐的内存

javascript - 减去 javascript 时间

java - showDialog 不显示 Android

c++ - const T& 和 T 类型参数的函数匹配

c++ - OpenGL:调用 glewInit() 后 glGetError() 返回无效枚举

php - 警告 : date_format() expects parameter 1 to be DateTime

android - 当我在 android studio 的 res 文件夹中创建目录时,它没有出现?即使刷新后