- °³¿ä
- ¸¶Áö¸·À¸·Î ¼öÁ¤ÇÑ ½Ã°£ ¾Ë¾Æ³»±â
- ¸µÅ©
1 °³¿ä
ÆÄÀÏ ½Ã°£... ¹º°¡ ¿©·¯ °¡Áö·Î º¹ÀâÇÏ´Ù. Á¤¸®ÇØ º¸ÀÚ¸é ´ÙÀ½°ú °°´Ù.
| Á¾·ù | ÀÇ¹Ì |
| System Time | UTC (Coordinated Universal Time) ±â¹Ý ŸÀÓ. ¾Æ¸¶ ¿µ±¹ ±×¸®´ÏÄ¡ ¾îµò°¡°¡ ±âÁØÀÌ¿´Áö. |
| Local Time | System Time ¿¡´Ù ŸÀÓÁ¸ °ª°ú DST(Daylight Saving Time) °ªÀ» ´õÇÏ°í »« °ª. |
| File Time | Create, Last Access, Last Write °ªÀÌ Àִµ¥, ¹®Á¦´Â ÆÄÀÏ ½Ã½ºÅÛ¸¶´Ù ÀÌ °ªÀ» ÀúÀåÇÏ´Â ¹æ½ÄÀÌ Æ²¸®´Ù´Â °Í. NTFS¿¡¼´Â UTC, Áï À§¿¡¼ ¾ð±ÞÇÑ System Time Çü½ÄÀ¸·Î ÆÄÀÏ Å¸ÀÓÀ» ÀúÀåÇÑ´Ù. FAT¿¡¼´Â Local Time Çü½ÄÀ¸·Î ÆÄÀÏ Å¸ÀÓÀ» ÀúÀåÇÑ´Ù. |
| Dos File Time | 16ºñÆ® ÆÄÀÏ Å¸ÀÓ |
FAT »ó¿¡ ÀÖ´Â ÆÄÀÏÀ̶û, NTFS »ó¿¡ ÀÖ´Â ÆÄÀÏÀ» ºñ±³ÇÒ ¶§´Â ¹¹°¡ ¾î¶»°Ô µ¹¾Æ°¡´Â °Å³Ä!
2 ¸¶Áö¸·À¸·Î ¼öÁ¤ÇÑ ½Ã°£ ¾Ë¾Æ³»±â
»ý¼º ½Ã°£µµ ÀÖ°í, ¾×¼¼½º ½Ã°£µµ ÀÖÁö¸¸, ÁÖ·Î »ç¿ëÇÏ´Â °Ç ¸¶Áö¸·À¸·Î ¼öÁ¤ÇÑ ½Ã°£(Last Write Time)ÀÌ´Ù.
ÀÏ´Ü MSDN¿¡ ³ª¿ÍÀÖ´Â »ùÇÃÀ» ±âº»À¸·Î ¸¸µç ¼Ò½º... ÀÌ ¹æ½ÄÀÌ Ç¥ÁØÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. (°ú¿¬?)
string getLastWriteTime(const string& filename)
{
HANDLE hFile = ::CreateFile(filename.c_str(),
GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE) return "";
FILETIME ftCreate, ftAccess, ftWrite;
SYSTEMTIME stUTC, stLocal;
// ÆÄÀÏ Å¸ÀÓÀ» ¾ò¾î³½´Ù.
if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
{
::CloseHandle(hFile);
return "";
}
// ¸¶Áö¸· ¼öÁ¤ ½Ã°£À» ·ÎÄà ŸÀÓÀ¸·Î º¯È¯ÇÑ´Ù.
FileTimeToSystemTime(&ftWrite, &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
// ¹®ÀÚ¿·Î º¯È¯ÇÑ´Ù.
char buf[256] = {0,};
sprintf(buf, "%d/%02d/%02d %02d:%02d:%02d",
stLocal.wYear, stLocal.wMonth, stLocal.wDay,
stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
::CloseHandle(hFile);
return buf;
}
Zip ¶óÀ̺귯¸® Á¦ÀÛÇÒ ¶§ »ç¿ëÇÑ ¼Ò½º... ´Ù¸¥ °Ç ¾Æ´Ï°í, WORD ÇüÀ¸·Î µÈ ³¯Â¥¿Í ½Ã°£ÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. ±×¸®°í ¿øÀÎÀº Àß ¸ð¸£°ÚÀ¸³ª, À§ÀÇ ¹öÀü°ú 2Ãʾ¿ Â÷À̰¡ ³¯ ¶§°¡ ÀÖ´Ù. ¾È ³¯ ¶§µµ ÀÖ°í... ¤Ñ¤Ñ;
string getLastWriteTime(const string& filename)
{
WIN32_FIND_DATA ff32;
FILETIME ftWrite;
HANDLE hFind = ::FindFirstFile(filename.c_str(), &ff32);
if (hFind == INVALID_HANDLE_VALUE) return "";
// ¸¶Áö¸· ¼öÁ¤ ½Ã°£À» º¹»çÇÑ´Ù.
::FileTimeToLocalFileTime(&(ff32.ftLastWriteTime), &ftWrite);
// ÇÚµé ´Ý¾ÆÁÖ°í...
::FindClose(hFind);
struct DOS_DATE
{
unsigned day : 5;
unsigned month : 4;
unsigned year : 7;
};
struct DOS_TIME
{
unsigned second : 5;
unsigned minute : 6;
unsigned hour : 5;
};
DOS_DATE dos_date;
DOS_TIME dos_time;
char buf[256] = {0,};
// µµ½º ŸÀÓÀ¸·Î º¯È¯ÇÑ´Ù.
FileTimeToDosDateTime(&ftWrite,
reinterpret_cast<WORD*>(&dos_date),
reinterpret_cast<WORD*>(&dos_time));
// ¹®ÀÚ¿·Î º¯È¯ÇÑ´Ù.
sprintf(buf, "%4d/%02d/%02d %02d:%02d:%02d",
dos_date.year + 1980, dos_date.month, dos_date.day,
dos_time.hour, dos_time.minute, dos_time.second * 2);
return buf;
}
½ºÅÄ´Ùµå ¶óÀ̺귯¸®ÀÇ stat ÇÔ¼ö¸¦ »ç¿ëÇÑ ¼Ò½º. ÇÔ¼ö ½Ã±×³ÊÃİ¡ À¯´Ð½º °è¿°ú´Â ¾à°£ Ʋ¸®´Ï ÁÖÀÇ... ±×°Ç ±×·¸°í MS ½¦À̵é, ½ºÅÄ´Ùµå ¶óÀ̺귯¸®´Â ¿Ö ¹®¼¸¦ Á¦´ë·Î ¾È ¸¸µå´Â °Å¾ß...
...
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
string getLastWriteTime(const string& filename)
{
struct __stat64 fs;
int result = _stat64(filename.c_str(), &fs);
if (result != 0) return "";
struct tm* ftWrite = _localtime64(&fs.st_mtime);
if (ftWrite == NULL) return "";
char buf[256] = {0,};
sprintf(buf, "%4d/%02d/%02d %02d:%02d:%02d",
ftWrite->tm_year + 1900, ftWrite->tm_mon + 1, ftWrite->tm_mday,
ftWrite->tm_hour, ftWrite->tm_min, ftWrite->tm_sec);
return buf;
}
3 ¸µÅ©
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)