我正在编写一个脚本,该脚本将删除一周前修改过的文件夹中的文件,而我将上次修改日期转换为字符串时遇到问题。
所以我试图将文件的最后修改日期写入字符串向量。
粗体线是错误线,它说
|| === 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;
}
答案 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功能获得文本表示。请看波特先生的答案......