Я работаю над скриптом, который удалит файлы из папки, которая была изменена в течение недели назад, и у меня возникли проблемы с получением последней измененной даты в строку.
Поэтому я пытаюсь записать последнюю измененную дату файла в вектор строки.
Жирная линия - это строка ошибки, она говорит
|| === Build: Debug in WeekaDelete (компилятор: компилятор GNU GCC) === | \WeekaDelete\main.cpp || В функции 'int main (int, char **)': | \WeekaDelete\main.cpp | 21 | ошибка: невозможно привязать 'std :: ostream {aka std :: basic_ostream}' lvalue to 'std :: basic_ostream &&' | codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream | 602 | ошибка: инициализирующий аргумент 1 из 'std :: basic_ostream <_CharT, _Traits> & std :: operator << (std:: basic_ostream <_CharT, _Traits> &&, const _Tp &) [с _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;
}
Поскольку вы используете 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
если вы хотите время, а также дату.
Вы пытаетесь назначить std::string
из структуры FILETIME
. Стандартная библиотека C++ не знает, как вы хотите, чтобы этот тип MS Windows выводился, а Microsoft не потрудилась обеспечить удобную функцию потоковой передачи в своем заголовке... вам нужно найти и использовать функцию Windows для получения текстовое представление. Видите, мистер Поттер отвечает за это....
sizeof(tchDate) / sizeof(tchDate[0])
вы можете использоватьsizeof(tchDate) / sizeof(tchDate[0])
.