ExtIntegrityCheckSum.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXT_EXTINTEGRITYCHECKSUM_H)
  22. #define __EXT_EXTINTEGRITYCHECKSUM_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. #ifndef __AFXCONV_H__
  27. #include <AfxConv.h>
  28. #endif
  29. #include <io.h>
  30. class __PROF_UIS_API CExtIntegrityCheckSum
  31. {
  32. public:
  33. static bool statIsFileExists(
  34. __EXT_MFC_SAFE_LPCTSTR sFilePath
  35. )
  36. {
  37. ASSERT(sFilePath != NULL);
  38. if(sFilePath == NULL)
  39. return false;
  40. #if (defined _UNICODE)
  41. struct _wfinddata_t fd;
  42. #else
  43. struct _finddata_t fd;
  44. #endif
  45. long hNextFile = (long)
  46. #if (defined _UNICODE)
  47. _wfindfirst(
  48. (wchar_t *) (LPVOID) (LPCTSTR) sFilePath,
  49. #else
  50. _findfirst(
  51. (const char *) sFilePath,
  52. #endif
  53. &fd
  54. );
  55. bool bExists = true;
  56. if(hNextFile < 0)
  57. bExists = false;
  58. else
  59. {
  60. if((fd.attrib&_A_SUBDIR)!=0)
  61. bExists = false;
  62. } // else from if(hNextFile < 0)
  63. _findclose(hNextFile);
  64. return bExists;
  65. };
  66. public:
  67. //constructor/destructor
  68. CExtIntegrityCheckSum()
  69. {
  70. Init();
  71. };
  72. virtual ~CExtIntegrityCheckSum()
  73. {
  74. };
  75. protected:
  76. int m_nCurrent;
  77. DWORD m_dwHashStarts[4];
  78. void Init()
  79. {
  80. m_nCurrent = 0L;
  81. ::memset( m_dwHashStarts, 0, sizeof(m_dwHashStarts) );
  82. }
  83. void JumpNextItem()
  84. {
  85. m_nCurrent++;
  86. if( m_nCurrent < sizeof(m_dwHashStarts) / sizeof(m_dwHashStarts[0]) )
  87. return;
  88. m_nCurrent = 0L;
  89. }
  90. public:
  91. void Update(
  92. const BYTE * pInput,
  93. ULONG nInputLen
  94. )
  95. {
  96. for( ULONG nIdx = 0; nIdx < nInputLen; nIdx++, pInput++ )
  97. {
  98. DWORD & dwHashItem = m_dwHashStarts[ m_nCurrent ];
  99. dwHashItem = ( dwHashItem << 4 ) + (*pInput);
  100. DWORD dwRecalc;
  101. if( (dwRecalc = dwHashItem & 0xF0000000L ) != 0L ) 
  102. {
  103. dwHashItem ^= dwRecalc >> 24;
  104. dwHashItem ^= dwRecalc;
  105. }
  106. JumpNextItem();
  107. }
  108. }
  109. CExtSafeString Final()
  110. {
  111. CExtSafeString sHash( _T("") );
  112. for( int nIdx = 0;
  113. nIdx < sizeof(m_dwHashStarts) / sizeof(m_dwHashStarts[0]);
  114. nIdx++
  115. )
  116. {
  117. CExtSafeString sTmp;
  118. sTmp.Format(
  119. _T("%s%02X %02X %02X %02X"),
  120. (nIdx > 0) ? _T(" ") :_T(""), 
  121. ( int( m_dwHashStarts[ nIdx ] ) >> 24 ) & 0x0FF,
  122. ( int( m_dwHashStarts[ nIdx ] ) >> 16 ) & 0x0FF,
  123. ( int( m_dwHashStarts[ nIdx ] ) >>  8 ) & 0x0FF,
  124.   int( m_dwHashStarts[ nIdx ] )         & 0x0FF
  125. );
  126. sHash += sTmp;
  127. }
  128. return sHash;
  129. }
  130. }; // class CExtIntegrityCheckSum
  131. #endif // __EXT_EXTINTEGRITYCHECKSUM_H