Дата последнего изменения файла в строку c ++

0

Я работаю над скриптом, который удалит файлы из папки, которая была изменена в течение недели назад, и у меня возникли проблемы с получением последней измененной даты в строку.

Поэтому я пытаюсь записать последнюю измененную дату файла в вектор строки.

Жирная линия - это строка ошибки, она говорит

|| === 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;
}
Теги:
string
c++11
datetime
gcc

2 ответа

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 если вы хотите время, а также дату.

  • 0
    после вставки фрагмента кода код не будет скомпилирован, _countof не объявлен. Разве это не из <windows.h> ??
  • 0
    @ Meikle-John sizeof(tchDate) / sizeof(tchDate[0]) вы можете использовать sizeof(tchDate) / sizeof(tchDate[0]) .
0

Вы пытаетесь назначить std::string из структуры FILETIME. Стандартная библиотека C++ не знает, как вы хотите, чтобы этот тип MS Windows выводился, а Microsoft не потрудилась обеспечить удобную функцию потоковой передачи в своем заголовке... вам нужно найти и использовать функцию Windows для получения текстовое представление. Видите, мистер Поттер отвечает за это....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню