파일 생성 시간??

namola의 이미지

파일 생성 시간을 알수있는 방법 있는지요?
C 함수로 stat() 안에 파일 이름 넣으면 그 파일의 .... 수정 시간은 아는데 ..
생성 시간을 알 수 가 없수가 없습니다.

File attachments: 
첨부파일 크기
Image icon 1.jpg9.3 KB
세벌의 이미지

없는 걸로 알고 있습니다.

ls 명령에도 파일을 처음 만든 시간은 안 나오고 최종 수정한 시간만 나오고,
엠에스윈도 탐색기에도 최종 수정한 시간만 나오던데요?

windower의 이미지

저도 잘모르겠습니다만..
어딘가 있을듯

댓글 첨부 파일: 
첨부파일 크기
Image icon 0바이트

Always

barmi의 이미지

stat로는 알 수 없는 게 확실한 것 같구요...

              struct stat
              {
                  dev_t         st_dev;      /* device */
                  ino_t         st_ino;      /* inode */
                  mode_t        st_mode;     /* protection */
                  nlink_t       st_nlink;    /* number of hard links */
                  uid_t         st_uid;      /* user ID of owner */
                  gid_t         st_gid;      /* group ID of owner */
                  dev_t         st_rdev;     /* device type (if inode device) */
                  off_t         st_size;     /* total size, in bytes */
                  unsigned long st_blksize;  /* blocksize for filesystem I/O */
                  unsigned long st_blocks;   /* number of blocks allocated */
                  time_t        st_atime;    /* time of last access */
                  time_t        st_mtime;    /* time of last modification */
                  time_t        st_ctime;    /* time of last change */
              };

MS Windows API에는 GetFileTime(), GetFileInformationByHandle() 등이 있어서 CreateTime을 가져 올 수 있군요.

BOOL GetFileTime(
  HANDLE hFile,                 // handle to file
  LPFILETIME lpCreationTime,    // creation time
  LPFILETIME lpLastAccessTime,  // last access time
  LPFILETIME lpLastWriteTime    // last write time
);

typedef struct _BY_HANDLE_FILE_INFORMATION {
  DWORD    dwFileAttributes; 
  FILETIME ftCreationTime; 
  FILETIME ftLastAccessTime; 
  FILETIME ftLastWriteTime; 
  DWORD    dwVolumeSerialNumber; 
  DWORD    nFileSizeHigh; 
  DWORD    nFileSizeLow; 
  DWORD    nNumberOfLinks; 
  DWORD    nFileIndexHigh; 
  DWORD    nFileIndexLow; 
} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION;

재밌는게, stat와 MSWindows API 모두 각각 세개의 시각을 가지고 있으나, 그 용도가 조금 차이가 나네요.

혹시 CrossPlatform인 Kylix는 어떻게 처리하나 봤더니,

function AllocFileInfo(SearchRec: TSearchRec): PFileInfo;
{$IFDEF LINUX}
var
  statbuf: TStatBuf;
  FName: string;
  Ret: Integer;
  Buffer: array[0.._POSIX_PATH_MAX - 1] of Char;
{$ENDIF}
begin
  New(Result);
  FillChar(Result^, SizeOf(Result^), 0);
  Result^.SR := SearchRec;
{$IFDEF LINUX}
  FName := SearchRec.PathOnly + SearchRec.Name;
  if stat(PChar(FName), statbuf) = 0 then
    Result^.stat := statbuf;
  if SearchRec.Attr and faSymLink <> 0 then
  begin
    Ret := readlink(PChar(FName), Buffer, SizeOf(Buffer));
    if Ret > 0 then
    begin
      SetString(Result^.LinkTarget, Buffer, Ret);
      if IsRelativePath(Result^.LinkTarget) then
        Result^.LinkTarget := SearchRec.PathOnly + Result^.LinkTarget;
      Result^.LinkTarget := ExpandFileName(Result^.LinkTarget);
    end;
  end;
{$ENDIF}
  Result^.ImageIndex := iiNoIcon;
end;

위의 코드는 delphi7에서 가져온 겁니다만, Kylix호환코드니 kylix와 크게 다르지 않을 것 같네요.

어쨋든, 현재로는 stat로는 화일의 생성 시각을 알 수 없는 건 거의 확실하구요,
다른 함수가 있으면 모르겠지만, FileSystem자체에 화일 생성 시각에 관한 정보를 가지고 있는 지 조차 의문스럽습니다.... (여기저기 찾아봐도 없는 것 같은 기분이 듭니다...)

어쨋든.... 찾아보느라 많이 배웠네요..

그리고, 짚고 넘어가야 할 것 한가지

Quote:

파일 생성 시간을 알수있는 방법 있는지요?

생성 시간 이 아니라 생성 시각입니다.

cjh의 이미지

유닉스 시간에서 st_ctime을 쓰시면 대략 유사할 겁니다. ctime은 해당 파일 inode의 마지막 변경 시간을 의미하는데, 이런 일은 파일 생성/위치 변경 등의 경우밖에 없습니다. 파일 내용에 대한 읽기/쓰기는 ctime을 바꾸지 않습니다.
정확히 파일이 생긴 시간은 아니기는 하네요.

st_ctime Time when file status was last changed (inode data modifi-cation). Changed by the chflags(2), chmod(2), chown(2), creat(2), link(2), mkdir(2), mkfifo(2), mknod(2), rename(2), rmdir(2), symlink(2), truncate(2), unlink(2), utimes(2), write(2) and writev(2) system calls.

--
익스펙토 페트로눔

cjh의 이미지

음. FreeBSD stat(2)에는 st_birthtime이라는게 있네요. inode의 생성 시간이라고 합니다.

st_birthtime Time when the inode was created.

http://www.freebsd.org/cgi/man.cgi?query=stat&apropos=0&sektion=2&manpath=FreeBSD+5.2-RELEASE+and+Ports&format=html

--
익스펙토 페트로눔

barmi의 이미지

ctime은 화일의 생성/위치 변경 뿐만 아니라, inode에 대한 자체의 정보-예를 들어 owner, permission등-이 변경될 때도 reset됩니다.

cjh wrote:
유닉스 시간에서 st_ctime을 쓰시면 대략 유사할 겁니다. ctime은 해당 파일 inode의 마지막 변경 시간을 의미하는데, 이런 일은 파일 생성/위치 변경 등의 경우밖에 없습니다. 파일 내용에 대한 읽기/쓰기는 ctime을 바꾸지 않습니다.
정확히 파일이 생긴 시간은 아니기는 하네요.

st_ctime Time when file status was last changed (inode data modifi-cation). Changed by the chflags(2), chmod(2), chown(2), creat(2), link(2), mkdir(2), mkfifo(2), mknod(2), rename(2), rmdir(2), symlink(2), truncate(2), unlink(2), utimes(2), write(2) and writev(2) system calls.

그리고, 한번 더 - 시각입니다.

barmi의 이미지

흠... 그러네요.
FreeBSD에만 있네요.
그리고, 그것도 처음부터 있던 건 아니었고, 5.x대 릴리즈부터 들어있군요.
특이한 건, 그 이전에 잠시 들어가 있던 이름은 st_createtime이었네요.

cjh wrote:
음. FreeBSD stat(2)에는 st_birthtime이라는게 있네요. inode의 생성 시간이라고 합니다.

st_birthtime Time when the inode was created.

http://www.freebsd.org/cgi/man.cgi?query=stat&apropos=0&sektion=2&manpath=FreeBSD+5.2-RELEASE+and+Ports&format=html

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.