CAFE

서은아빠 XML/API

[API][Tip]15-파일속성:생성일시,최종수정등:GetFileTime

작성자차현우|작성시간07.04.29|조회수629 목록 댓글 0

[Tip]15-파일속성:생성일시,최종수정등:GetFileTime
스승님께서 API공부하라구 지령하신지 2개월이 되었군요...
시간 참 빠릅니다...
API고수왈~~~...
먼저 도스환경에서 공부하다가 C,C++,VC등으루 올라가능게 순서라더군요,,,
그러나~~~~ 엑셀이나 VB등에서 가저다가 활용만 잘해두 된다는 소문이 있서서 시작했습니다..
잠깐 한눈팔다가(당구 삼매경) 다시 채찍질 시작합니다....
변덕심한 뻔번엑셀러를 너그러이 봐주시구요..^^ 그럼~~~~
오늘은 간혹 엑사모에두 올라오는 파일속성을 알아보는 함수입니다...
VBA, VB등으루 간단히 해결이 가능하며....
더불어 얻어오는 값이 약간 틀린 API함수로도 기술합니다...
먼저 API함수를 이용해서 파일의 생성일시, 마지막 엑세스 일시, 최종수정일시등을 알아봅니다..

Option Explicit
''''''''''''' // 파일의 생성일시, 작업일시, 최종수정일시등을 얻어오는 함수
Private Declare Function GetFileTime Lib "kernel32" ( _
                                    ByVal F_hwnd As Long, _
                                    lpCreationTime As FILETIME, _
                                    lpLastAccessTime As FILETIME, _
                                    lpLastWriteTime As FILETIME) As Long
''''''''''''' // 64비트 시간을 시스템 시간으로 변환하는 함수
Private Declare Function FileTimeToSystemTime Lib "kernel32" ( _
                                    lpFileTime As FILETIME, _
                                    lpSystemTime As SYSTEMTIME) As Long
''''''''''''' // 시스템 시간을 파일시간으로 변환하는 함수
Private Declare Function SystemTimeToFileTime Lib "kernel32" ( _
                                    lpSystemTime As SYSTEMTIME, _
                                    lpFileTime As FILETIME) As Long
''''''''''''' // 파일오픈 함수
Private Declare Function OpenFile Lib "kernel32" ( _
                                    ByVal lpFileName As String, _
                                    lpReOpenBuff As OFSTRUCT, _
                                    ByVal wStyle As Long) As Long
''''''''''''' // 핸들값 종료
Private Declare Function CloseHandle Lib "kernel32" (ByVal F_hwnd As Long) As Long

Private Const OFS_MAXPATHNAME = 260
Private Const OF_READWRITE = &H2
Private Const OF_READ = &H0

Private Type OFSTRUCT
   cBytes      As Byte
   fFixedDisk  As Byte
   nErrCode    As Integer
   Reserved1   As Integer
   Reserved2   As Integer
   szPathName(OFS_MAXPATHNAME) As Byte
End Type

Private Type FILETIME
  dwLowDateTime     As Long
  dwHighDateTime    As Long
End Type


Private Type SYSTEMTIME
  wYear          As Integer
  wMonth         As Integer
  wDayOfWeek     As Integer
  wDay           As Integer
  wHour          As Integer
  wMinute        As Integer
  wSecond        As Integer
  wMilliseconds  As Integer
End Type


Sub API_getsystemtime()
    Dim F_hwnd As Long               '''' // 오픈할 파일의 핸들값 너을 변수
    Dim strMsg As String             '''' // 메세지박스에 담을 문자열
    Dim FT_CREATE As FILETIME
    Dim FT_ACCESS As FILETIME
    Dim FT_WRITE As FILETIME
    Dim OF As OFSTRUCT
    
    F_hwnd = OpenFile("c:S.txt", OF, OF_READWRITE)   '''' // lpFileName에 오픈할 파일명(경로포함)입력하구 파일오픈(읽기쓰기 가능)
    
    Call GetFileTime(F_hwnd, FT_CREATE, FT_ACCESS, FT_WRITE)  '''' // OpenFile함수루 얻은 핸들값으루 파일 맨든시간,최종수정시간,최종사용시간을 얻는다
    Call CloseHandle(F_hwnd)   ''' // 핸들을 닫는다..
   strMsg = "생성일자: " & GetFileDateString(FT_CREATE) & vbCrLf '/생성일자(맨든일자)를 사용자정의함수에서 얻고
    strMsg = strMsg & "최종사용 일자: " & GetFileDateString(FT_ACCESS) & vbCrLf  ''' // 사용일자를 역시 얻구
    strMsg = strMsg & "마지막으로 수정한 일자: " & GetFileDateString(FT_WRITE)  ''' // 최종수정된 일시를 얻구
    
    MsgBox strMsg
End Sub

Public Function GetFileDateString(File_T As FILETIME) As String

  Dim sys_T As SYSTEMTIME
  Dim F_time As Single
  Dim F_date As Single
  
If FileTimeToSystemTime(File_T, sys_T) Then
        F_date = DateSerial(sys_T.wYear, sys_T.wMonth, sys_T.wDay) ''' // DateSerial함수를 이용하여 날짜를 얻구
        F_time = TimeSerial(sys_T.wHour, sys_T.wMinute, sys_T.wMilliseconds)  
        ''' // TimeSerial함수를 이용하여 날짜를 얻구
        GetFileDateString = Format(F_date, "yyyy-mm-dd") & " _ " & Format(F_time, "hh:mm:ss")
  Else
    GetFileDateString = ""
  End If

End Function

역시나 선언부를 제외하군 별거 없습니다...

그럼~~ 이번엔 VBA루 간단히 해결합니다...

Option Explicit
Sub 다른파일_속성보기()
    Dim fso, f
    Dim strMsg As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile("C:    est.xls")
    
    strMsg = "파일형식: " & f.Type & vbCrLf
    strMsg = strMsg & "생성일자: " & f.DateCreated & vbCrLf
    strMsg = strMsg & "최종수정일: " & f.DateLastModified
    MsgBox strMsg
End Sub

Sub 현재파일_속성보기()
    Dim wk As Workbook
    Dim strMsg As String
    
    Set wk = ThisWorkbook
    strMsg = "만든이: " & wk.BuiltinDocumentProperties(3).Value & vbCrLf
    strMsg = strMsg & "최종수정자: " & wk.BuiltinDocumentProperties(7).Value & vbCrLf
    strMsg = strMsg & "파일형식: " & wk.BuiltinDocumentProperties(9).Value & vbCrLf
    strMsg = strMsg & "생성일자: " & wk.BuiltinDocumentProperties(11).Value & vbCrLf
    strMsg = strMsg & "최종수정일: " & wk.BuiltinDocumentProperties(12).Value & vbCrLf
    
    MsgBox strMsg
End Sub

요놈들 오디다가 써먹으실지는 잘 판단해 보시길 빕니다...
여러가지 조건문 사이사이 필요할때가 있을수두 있답니다..
낼 하루 더 버티믄 도 주말이군요... 그럼... 힘~~~

 

 

---------------이 글은 엑사모 에 올라와 있는 강좌로 저자이신 서은아빠님의 동의를 얻어 게재합니다.

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼