[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
요놈들 오디다가 써먹으실지는 잘 판단해 보시길 빕니다...
여러가지 조건문 사이사이 필요할때가 있을수두 있답니다..
낼 하루 더 버티믄 도 주말이군요... 그럼... 힘~~~
---------------이 글은 엑사모 에 올라와 있는 강좌로 저자이신 서은아빠님의 동의를 얻어 게재합니다.