Coding & Programming/C, C++

[C언어/C++] 파일 시간(MAC Time) 복사/수정하기-GetFileTime, SetFileTime 함수 예제

mainCodes 2021. 5. 3. 09:32

[C언어/C++] 파일 시간(MAC Time) 복사/수정하기-GetFileTime, SetFileTime 함수 예제

 

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و

 

일반적으로 파일 시스템은 파일에 대한 MAC Time을 기록합니다. MAC Time은 파일의 수정 시간(Modification Time), 접근시간(Access Time), 속성 변경 시간(metadata Change Time)을 의미하며 윈도우 운영체제 환경에서는 탐색기의 속성(R) 메뉴를 통해 확인할 수 있습니다.

 

 

예제는 mainCodes.zip 파일의 MAC Time을 읽어서 jollytree.zip 파일에 그대로 복사하는 기능이 포함되어 있으며 MAC Time 은 GetFileTime, SetFileTime 함수에 의해 복사됩니다.

 

🔗 MAC Time 복사 예제(Example):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <windows.h>
 
int changeFileTime(char* radFilename, char* writeFilename)
{
    HANDLE readHandle, writeHandle;
    FILETIME cTime, aTime, mTime;
 
    if ((readHandle = CreateFile(radFilename, GENERIC_READ, FILE_SHARE_READ,
        NULL, OPEN_EXISTING, 0NULL)) == INVALID_HANDLE_VALUE)
    {
        puts("CreateFile 에러");
        return -1;
    }
    if ((writeHandle = CreateFile(writeFilename, FILE_WRITE_ATTRIBUTES,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL, OPEN_EXISTING, 0NULL)) == INVALID_HANDLE_VALUE)
    {
        puts("CreateFile 에러");
        CloseHandle(readHandle);
        return -1;
    }
 
    if (GetFileTime(readHandle, &cTime, &aTime, &mTime) == TRUE)
        SetFileTime(writeHandle, &cTime, &aTime, &mTime);
 
    CloseHandle(readHandle);
    CloseHandle(writeHandle);
    return 0;
 
}
 
int main()
{
    char sourceFile[] = "maincodes.zip";
    char targetFile[] = "JollyTree.zip";
 
    if (changeFileTime(sourceFile, targetFile) == 0)
    {
        printf(" >> [%s] -> [%s]\n", sourceFile, targetFile);
        printf(" >> 파일의 MAC Time을 복사하였습니다.!\n");
    }
    else
        puts("changeFileTime 에러");
 
    return 0;
}
cs

 

🔗 실행결과(Output):

 

탐색기의 속성 메뉴를 이용하여 maincodes.zip 파일과 jollytree.zip의 MAC Time을 확인해 보면 동일하게 복사된 것을 알 수 있습니다.

 

 

상 JollyTree였습니다. (•̀ᴗ•́)و