IOException.cpp
上传用户:kx_jwh
上传日期:2021-09-03
资源大小:76k
文件大小:2k
源码类别:

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #include "IOException.h"
  3. #include <sstream>
  4. #include <string.h>
  5. #if defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64)
  6. # include <windows.h>
  7. #else
  8. # include <errno.h>
  9. #endif
  10. namespace febird {
  11. IOException::IOException(const char* szMsg)
  12.   : m_errCode(lastError()), m_message(szMsg)
  13. {
  14. m_message += ": ";
  15. m_message += errorText(m_errCode);
  16. }
  17. IOException::IOException(int errCode, const char* szMsg)
  18.   : m_errCode(errCode), m_message(szMsg)
  19. {
  20. m_message += ": ";
  21. m_message += errorText(m_errCode);
  22. }
  23. int IOException::lastError()
  24. {
  25. #if defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64)
  26. return ::GetLastError();
  27. #else
  28. return errno;
  29. #endif
  30. }
  31. std::string IOException::errorText(int errCode)
  32. {
  33. #if defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64)
  34. HLOCAL hLocal = NULL;
  35. DWORD dwTextLength = FormatMessageA(
  36. FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,
  37. NULL,
  38. errCode,
  39. 0, //MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
  40. (LPSTR)&hLocal,
  41. 0,
  42. NULL
  43. );
  44. std::ostringstream oss;
  45. LPCSTR pszMsg = (LPCSTR)LocalLock(hLocal);
  46. oss << "error[code=" << errCode << ", message=" << pszMsg << "]";
  47. LocalFree(hLocal);
  48. #else
  49. std::ostringstream oss;
  50. oss << "error[code=" << errCode << ", message=" << ::strerror(errCode) << "]";
  51. #endif
  52. return oss.str();
  53. }
  54. //////////////////////////////////////////////////////////////////////////
  55. OpenFileException::OpenFileException(const char* path, const char* szMsg)
  56. : IOException(szMsg), m_path(path)
  57. {
  58. m_message += ": ";
  59. m_message += m_path;
  60. }
  61. } // namespace febird