获取文件大小、时间

    技术2026-08-04  9

    获取文件大小时间:

    (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

    最新回复(0)