Как изменить атрибут времени LastAccess файла - PullRequest
0 голосов
/ 09 мая 2020

Я реализовал следующую функцию, которая изменяет время LastAccess файла на последнее время в текущей системе, но, тем не менее, я хотел, чтобы он изменил время LastAccess на индивидуальное время. например, я даю функции время 1994-04-04, а затем она меняет время LastAccess на это время.

BOOL SetFileToCurrentTime(const char* arg_path, const char* arg_file_name)
{
    HANDLE h_File;
    FILETIME ft_FileTime;
    SYSTEMTIME st_SystemTime;

    char l_c_Path[MAX_PATH];

    strcpy(l_c_Path, arg_path);
    strcat(l_c_Path, arg_file_name);

    h_File = CreateFile(l_c_Path, FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    GetSystemTime(&st_SystemTime);                          // Gets the current system time
    SystemTimeToFileTime(&st_SystemTime, &ft_FileTime);     // Converts the current system time to file time format

    if (SetFileTime(h_File, &ft_FileTime, &ft_FileTime, &ft_FileTime))
    {
        CloseHandle(h_File);
        return true;
    }
    else
    {
        return false;
    }
    CloseHandle(h_File);
}

Как мне изменить приведенный выше код для достижения цели?

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Используйте SystemTimeToFileTime() функцию , чтобы получить запрошенную дату в правильном формате, который вы можете передать в функцию SetFileTime().

0 голосов
/ 10 мая 2020

Я немного модифицирую ваш код для достижения цели. Если вы хотите изменить LastAccess файла, вы должны установить только это значение и установить для других параметров значение NULL.

#include <tchar.h>
#include <windows.h>
#include <stdio.h>

BOOL SetFileToCurrentTime(LPCTSTR lpFileName) {
    HANDLE hFile;
    FILETIME ft;
    SYSTEMTIME st;
    BOOL bResult = FALSE;
    DWORD dwLastErr = ERROR_SUCCESS;

    hFile = CreateFile(lpFileName, FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE) {
        // Cannot open this file
        return FALSE;
    }

    GetSystemTime(&st); // Gets the current system time
    SystemTimeToFileTime(&st, &ft); // Converts the current system time to file time format

    // set new LastAccess Time
    if (!(bResult = SetFileTime(hFile, NULL, &ft, NULL))) {
        dwLastErr = GetLastError();
    }

    CloseHandle(hFile);
    SetLastError(dwLastErr);
    return bResult;
}

int _tmain(int argc, _TCHAR *argv[]) {
    if (argc == 2) {
        if (SetFileToCurrentTime(argv[1])) {
            printf("Success\n");
        } else {
            printf("Failed! Last Error = %d\n", GetLastError());
        }
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...