티스토리 뷰

728x90

디지털 카메라나 스마프폰 카메라로 사진을 찍어 컴퓨터로 옮기는 경우 많은 경우 각 사진의 파일명은 년-월-일_시-분-초.jpg 처럼 파일명에 사진 촬영한 시각을 담는 것이 보통입니다. 물론 디카나 스마트폰의 시각이 잘못 되어 있는 경우는 파일명의 시간 또한 시스템 시간을 따라갈테니 잘못되는 것은 당연합니다. 그런데 한국과 시차가 다른 해외에 여행을 다녀오는 경우 현지 시간에 스마트폰 시간이 자동 조정되는 경우도 있고 시차가 있는 상태로 한국 시간대가 그대로 유지되는 경우도 있습니다. 문제는 사진을 정리하면서 어떤 분은 현지 시간대로 사진을 정리하고 싶을 수 있고, 어떤 사람은 현지 시간과 관계없이 한국 시간대로 정리하고 싶은 경우도 있을 수 있는데 사진 파일의 시간이 원하는 시간대와 다른 경우입니다.


이런 경우 파일명에 있는 시간대를 일괄적으로 수정해 주는 도구가 있다면 편리할텐데요. 아래의 코드는 C언어로 현재 디렉토리의 파일들을 읽어서 파일명 수정을 위한 스크립트를 만들어주는 프로그램입니다. system()등의 명령으로 프로그램 내에서 직접 파일명을 바꿀 수도 있지만 작업자의 확인을 거치기 위한 중간 단계입니다.


#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <time.h>

main()
{
    DIR *dd = opendir(".");
    struct dirent *dp;
    struct tm timeinfo;
    char buf[64];

    for (dp = readdir(dd); dp != NULL; dp = readdir(dd)) {
        if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) continue;
        
        //일자 구조 및 파일 확장자 검사 : 2017-06-19_13-59-58_918.jpg
        if (memcmp(dp->d_name, "2017", 4) != 0 || strstr(dp->d_name, ".jpg") == NULL) continue;
        
        strcpy(buf, dp->d_name);
        buf[4] = 0;
        timeinfo.tm_year = atoi(&buf[0])-1900;
        buf[7] = 0;
        timeinfo.tm_mon  = atoi(&buf[5]) - 1; // 1월은 0
        buf[10] = 0;
        timeinfo.tm_mday = atoi(&buf[8]); 
        buf[13] = 0;
        timeinfo.tm_hour = atoi(&buf[11]) - 7;  // 임의 시차 조정값
        buf[16] = 0;
        timeinfo.tm_min = atoi(&buf[14]);
        buf[19] = 0;
        timeinfo.tm_sec = atoi(&buf[17]);
        
        mktime(&timeinfo);
        printf("\nren %s %04d-%02d-%02d_%02d-%02d-%02d%s", dp->d_name, 
            timeinfo.tm_year + 1900, timeinfo.tm_mon + 1, timeinfo.tm_mday,
            timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec, &dp->d_name[19]);
    }
 
    closedir(dd);
}


디렉토리의 내용을 읽기 위해서 opendir, readdir등의 라이브러리 함수를 사용했고 시간대 조정을 위해서 struct tm 구조체와 mktime 함수를 사용했습니다. mktime() 함수는 struct tm 구조체 포인터를 인수로 받아서 time_t 값을 리턴하는데 값을 리턴할 뿐만아니라 struct tm  구조체의 내용도 조정하기 때문에 일자 및 시간 연산에 매우 편리한 도구입니다.



위의 실행 결과를 보면 코드에서는 단순히 시간을 -7 했지만 날짜등도 자동 조정된 것을 확인할 수 있습니다.



728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/06   »
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
글 보관함