获取文件大小时间:
(1)GetFileSize
(2)GetFileTime
(3)FindFirstFile的WIN32_FILE_DATA结构获取时间和大小等
注意:
(1)文件时间结构FILETIME通过 FileTimeToSystemTime转换为SYSTEMTIME结构
(2)SYSTEMTIME结构里的元素都是word类型,需要用movzx转换为dword,直接使用word会有问题
实例:
(1)GetFileSize
_GetSize proc ;获取文件大小
LOCAL @szfileSelectedName[MAX_PATH]:byte
LOCAL @szBuffer[100]:byte
LOCAL @dwFileSize
invoke GetDlgItemText,hWinMain,IDC_FILE,addr @szfileSelectedName,MAX_PATH
invoke CreateFile, addr
@szfileSelectedName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
;获取文件句柄
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,NULL,offset szWrong,offset szCaption,MB_OK
.else
mov hFile,eax ;保存句柄
invoke GetFileSize,hFile,addr @dwFileSize ;获取文件大小
mov ebx,eax ;低32位返回值在eax里,高32位在addr @dwFileSize里,暂不考虑
invoke wsprintf,addr @szBuffer,addr szSize,ebx
invoke SetDlgItemText,hWinMain,IDC_SIZEINFO,addr @szBuffer
.endif
invoke CloseHandle,hFile
ret
_GetSize endp
(2)GetFileTime
_GetCreateTime proc ;获取文件大小
LOCAL @szfileSelectedName[MAX_PATH]:byte
LOCAL @szBuffer[100]:byte
LOCAL @stFileCreateTime:FILETIME
LOCAL @stFileCreateSysTime:SYSTEMTIME
invoke GetDlgItemText,hWinMain,IDC_FILE,addr @szfileSelectedName,MAX_PATH
invoke CreateFile, addr
@szfileSelectedName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
;获取文件句柄
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,NULL,offset szWrong,offset szCaption,MB_OK
.else
mov hFile,eax ;保存句柄
invoke GetFileTime,hFile,addr @stFileCreateTime,NULL, NULL ;仅获取文件创建日期,
; invoke GetFileTime,hFile,addr @stFileCreateTime,addr @stFileLastAccessTime, addr @stFileLastWriteTime ;文件时间属性
invoke FileTimeToSystemTime,addr @stFileCreateTime,addr @stFileCreateSysTime ;转换文件创建日期
movzx eax,@stFileCreateSysTime.wYear
movzx ebx,@stFileCreateSysTime.wMonth
movzx ecx,@stFileCreateSysTime.wDay
movzx edx,@stFileCreateSysTime.wHour ;word 转化成 dword,否则显示不正常
movzx esi,@stFileCreateSysTime.wMinute
movzx edi,@stFileCreateSysTime.wSecond
invoke wsprintf,addr @szBuffer,addr szTime,eax,ebx,ecx,edx,esi,edi
invoke SetDlgItemText,hWinMain,IDC_TIME,addr @szBuffer
.endif
invoke CloseHandle,hFile
ret
_GetCreateTime endp
(3)FindFirstFile的WIN32_FILE_DATA结构
_FindFirstFileSize proc
LOCAL @szfileSelectedName[MAX_PATH]:byte
LOCAL @szBuffer[100]:byte
LOCAL @stFileLastAccessSysTime:SYSTEMTIME
LOCAL @stWin32FindData:WIN32_FIND_DATA
invoke GetDlgItemText,hWinMain,IDC_FILE,addr @szfileSelectedName,MAX_PATH
invoke CreateFile, addr
@szfileSelectedName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
;获取文件句柄
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,NULL,offset szWrong,offset szCaption,MB_OK
.else
invoke CloseHandle,hFile
invoke FindFirstFile,addr @szfileSelectedName,addr @stWin32FindData
.if eax != INVALID_HANDLE_VALUE
mov hFile,eax
invoke CloseHandle,hFile
mov ebx,@stWin32FindData.nFileSizeLow ;低32位
invoke wsprintf,addr @szBuffer,addr szSize,ebx
invoke SetDlgItemText,hWinMain,IDC_FINDFIRSTFILE,addr @szBuffer ;大小完成
;开始读最后访问时间,利用 @stWin32FindData.ftLastAccessTime文件时间结构
invoke FileTimeToSystemTime,addr @stWin32FindData.ftLastAccessTime,addr @stFileLastAccessSysTime
movzx eax,@stFileLastAccessSysTime.wYear
movzx ebx,@stFileLastAccessSysTime.wMonth
movzx ecx,@stFileLastAccessSysTime.wDay
movzx edx,@stFileLastAccessSysTime.wHour ;word 转化成 dword,否则显示不正常
movzx esi,@stFileLastAccessSysTime.wMinute
movzx edi,@stFileLastAccessSysTime.wSecond
invoke wsprintf,addr @szBuffer,addr szTime,eax,ebx,ecx,edx,esi,edi
invoke SetDlgItemText,hWinMain,IDC_FINDFIRSTFILETIME,addr @szBuffer
.endif
.endif
ret
_FindFirstFileSize endp