获取文件大小时间:
(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
