Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. // ヘッダのインクルード
  2. // 独自のヘッダ
  3. #include "BinaryFile.h" // バイナリファイルクラス
  4.  
  5. // コンストラクタCBinaryFile()
  6. CBinaryFile::CBinaryFile(){
  7.  
  8. // メンバ変数の初期化
  9. m_hFile = NULL; // m_hFileをNULLで初期化.
  10. m_pByte = NULL; // m_pByteをNULLで初期化.
  11. ZeroMemory(m_tszFileName, sizeof(TCHAR) * 1024); // ZeroMemoryでm_tszFileNameを0で埋める.
  12.  
  13. }
  14.  
  15. // デストラクタ~CBinaryFile()
  16. CBinaryFile::~CBinaryFile(){
  17.  
  18. // メンバ変数の終了処理
  19. ZeroMemory(m_tszFileName, sizeof(TCHAR) * 1024); // ZeroMemoryでm_tszFileNameを0で埋める.
  20. if (m_pByte != NULL) { // NULLでなければ.
  21. delete[] m_pByte; // deleteでm_pByteを解放.
  22. m_pByte = NULL; // m_pByteにNULLをセット.
  23. }
  24. if (m_hFile != NULL) { // NULLでなければ.
  25. Close(); // 閉じる.
  26. m_hFile = NULL; // m_hFileにNULLをセット.
  27. }
  28.  
  29. }
  30.  
  31. // ファイルの作成およびファイルを開く操作を行うメンバ関数Open.
  32. BOOL CBinaryFile::Open(LPCTSTR lpctszFileName, DWORD dwDesiredAccess, DWORD dwCreationDisposition){
  33.  
  34. // ファイル名をメンバにセット.
  35. _tcscpy_s(m_tszFileName, 1024, lpctszFileName); // _tcscpy_sで引数をメンバにコピー.(第2引数はWORD単位でのサイズ.)
  36.  
  37. // ファイルを開く.
  38. m_hFile = CreateFile(m_tszFileName, dwDesiredAccess, 0, NULL, dwCreationDisposition, FILE_ATTRIBUTE_NORMAL, NULL); // CreateFileでファイルm_tszFileNameを開く.
  39. if (m_hFile == INVALID_HANDLE_VALUE) { // 失敗.
  40. return FALSE; // FALSEを返す.
  41. }
  42.  
  43. // 成功
  44. return TRUE; // TRUEを返す.
  45.  
  46. }
  47.  
  48. // ファイルを閉じるメンバ関数Close.
  49. void CBinaryFile::Close(){
  50.  
  51. // ファイルを閉じる.
  52. CloseHandle(m_hFile); // CloseHandleでm_hFileを閉じる.
  53. m_hFile = NULL; // NULLをセット.
  54.  
  55. }
  56. // ファイルを書き込むメンバ関数Write.(pBytesは外部でバッファを持っている場合の書き込み対象バイト列.)
  57. BOOL CBinaryFile::Write(BYTE * pBytes, UINT nCount){
  58.  
  59. // 変数の初期化
  60. DWORD dwBytes = 0; // DWORD型dwBytesを0で初期化.
  61.  
  62. // pBytesを書き込む.
  63. return WriteFile(m_hFile, pBytes, nCount, &dwBytes, NULL); // WriteileでpBytesの内容を書き込む.
  64.  
  65. }
  66.  
  67. // "名前を付けて保存"のファイルダイアログを表示し, 選択されたファイル名を取得するメンバ関数GetSaveFileName.
  68. BOOL CBinaryFile::GetSaveFileName(LPTSTR lptszFileName, int nMax, LPCTSTR lpctszFilter, HWND hWnd){
  69.  
  70. // 変数の初期化
  71. OPENFILENAME ofn = { 0 }; // OPENFILENAME構造体変数ofnを0で初期化.
  72. TCHAR tszFilter[1024] = { 0 }; // tszFilterを0で初期化.
  73.  
  74. // ofnの設定
  75. ofn.lStructSize = sizeof(OPENFILENAME); // OPENFILENAME構造体のサイズをセット.
  76. ofn.hwndOwner = hWnd; // 指定されたhWndをセット.
  77. int len = _tcslen(lpctszFilter); // lpctszFilterの長さを取得.
  78. _tcscpy_s(tszFilter, 1024, lpctszFilter); // lpctszFilterをtszFilterにコピー.
  79. for (int i = len - 1; i >= 0; i--) { // 後ろから'|'を'\0'に置き換える.
  80. if (tszFilter[i] == FITLER_DELIMITER_CHAR) { // '|'だった場合.
  81. tszFilter[i] = _T('\0'); // tszFilter[i]に'|'を代入.
  82. }
  83. }
  84. ofn.lpstrFilter = tszFilter; // tszFilterをセット.
  85. ofn.lpstrFile = lptszFileName; // 指定されたlpctszFileNameをセット.
  86. ofn.nMaxFile = nMax; // 指定されたnMaxをセット.
  87. ofn.Flags = OFN_OVERWRITEPROMPT; // 上書き時のメッセージボックス表示.
  88.  
  89. // "名前を付けて保存"ファイルダイアログの表示.
  90. if (!::GetSaveFileName(&ofn)) { // GetSaveFileNameで"名前を付けて保存"ファイルダイアログを表示.
  91.  
  92. // 選択肢なかった場合.
  93. return FALSE; // FALSEを返す.
  94.  
  95. }
  96.  
  97. // 選択した場合.
  98. return TRUE; // TRUEを返す.
  99.  
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement