文件的最后修改日期为字符串c ++

时间:2014-11-15 04:58:43

标签: c++ string datetime c++11 gcc

我正在编写一个脚本,该脚本将删除一周前修改过的文件夹中的文件,而我将上次修改日期转换为字符串时遇到问题。

所以我试图将文件的最后修改日期写入字符串向量。

粗体线是错误线,它说

  

|| === Build:WeekaDelete中的Debug(编译器:GNU GCC编译器)=== |   \ WeekaDelete \ main.cpp ||在函数'int main(int,char **)'中:|   \ WeekaDelete \ main.cpp | 21 |错误:无法将'std :: ostream {aka std :: basic_ostream}'左值绑定到'std :: basic_ostream&&'|   codeblocks \ mingw \ lib \ gcc \ mingw32 \ 4.8.1 \ include \ c ++ \ ostream | 602 | error:初始化'std :: basic_ostream< _CharT,_Traits>&的参数1 std :: operator<<(std :: basic_ostream< _CharT,_Traits>&&,const _Tp&)[with _CharT = char; _Traits = std :: char_traits; _Tp = _FILETIME]'|   || ===构建失败:2个错误,0个警告(0分钟,0秒(秒))=== |

#include <windows.h>
#include <vector>
#include <ctime>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
    WIN32_FIND_DATA search_data;
    memset(&search_data, 0, sizeof(WIN32_FIND_DATA));
    HANDLE handle = FindFirstFile("C:\\Users\\Meikle-John\\Desktop\\CoastWideCivil\\C++\\Scans\\*",         &search_data);
    int ifilecount = -2;
    vector<string> vsname, vsdate;
    string tempn, tempd;
    while(handle != INVALID_HANDLE_VALUE)
    {
        tempn = search_data.cFileName;
        **tempd = search_data.ftLastAccessTime;**
        cout << tempd << endl;
        cout << tempn << " : " << tempd << endl;
        cout << ifilecount++ << endl;
        if(ifilecount > -1)
        {
            vsname.push_back(tempn);
            vsdate.push_back(tempd);
        }
        if(FindNextFile(handle, &search_data) == FALSE)
        {
            break;
        }
    }
    //Close the handle after use or memory/resource leak
    FindClose(handle);
    cout << "There are:" << ifilecount << " Files in this directory" << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

由于您使用的是Win32,最简单的方法是使用GetDateFormat函数:

TCHAR tchDate[80];

SYSTEMTIME st;
FileTimeToSystemTime(&search_data.ftLastAccessTime, &st);

GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE,
    &st, nullptr, tchDate, _countof(tchDate));
cout << tchDate;

如果您想要时间和日期,还有GetTimeFormat

答案 1 :(得分:0)

您正尝试从FILETIME structure分配给std::string。 C ++标准库并不知道你希望如何输出这个MS Windows类型,而且微软也不愿意在它们的标题中提供方便的流媒体功能......你必须找到并使用Windows功能获得文本表示。请看波特先生的答案......