\83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CFile.cpp on 'feature/Fixing_DirectSound_memoryleak' - RSS feed" href="/view?p=dtxmania/dtxmania.git;a=rss;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CFile.cpp;h=refs/heads/feature/Fixing_DirectSound_memoryleak" type="application/rss+xml" /> \83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CFile.cpp on 'feature/Fixing_DirectSound_memoryleak' - RSS feed (no merges)" href="/view?p=dtxmania/dtxmania.git;a=rss;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CFile.cpp;h=refs/heads/feature/Fixing_DirectSound_memoryleak;opt=--no-merges" type="application/rss+xml" /> \83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CFile.cpp on 'feature/Fixing_DirectSound_memoryleak' - Atom feed" href="/view?p=dtxmania/dtxmania.git;a=atom;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CFile.cpp;h=refs/heads/feature/Fixing_DirectSound_memoryleak" type="application/atom+xml" /> \83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CFile.cpp on 'feature/Fixing_DirectSound_memoryleak' - Atom feed (no merges)" href="/view?p=dtxmania/dtxmania.git;a=atom;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CFile.cpp;h=refs/heads/feature/Fixing_DirectSound_memoryleak;opt=--no-merges" type="application/atom+xml" />

OSDN Git Service

DirectSoundでClone()するとメモリリークする問題修正の途中版。WAVデータ実体への参照カウンタを実装済み。
[dtxmania/dtxmania.git] / DTXViewerプロジェクト / @FDK10ã\83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88 / CFile.cpp
1 #include "stdafx.h"
2 #include "CFile.h"
3
4 namespace FDK {
5         namespace General {
6
7 CFile::CFile()
8 {
9         this->pData = NULL;
10         Init();
11 }
12
13 CFile::~CFile()
14 {
15         Init();
16 }
17
18 void    CFile::Init()
19 {
20         SAFE_FREE( this->pData );
21         this->strFileName.clear();
22         this->strExt[0]                                          = _T('\0');
23         this->ftLastWriteTime.dwLowDateTime  = 0;
24         this->ftLastWriteTime.dwHighDateTime = 0;
25         this->dwFileSizeHigh                             = 0;
26         this->dwFileSizeLow                                      = 0;
27 }
28
29 void    CFile::Term()
30 {
31         Init();
32 }
33
34 bool    CFile::Load( LPCTSTR filename )
35 {
36         // \8f\89\8aú\89»
37         Init();
38         this->strFileName = filename;
39
40         // \83t\83@\83C\83\8b\8fî\95ñ\82Ì\8eæ\93¾
41         GetExt( filename, this->strExt );
42         WIN32_FILE_ATTRIBUTE_DATA fileInfo;
43         if( ! ::GetFileAttributesEx( filename, GetFileExInfoStandard, &fileInfo))
44                 return false;           // \8e¸\94s
45
46         this->ftLastWriteTime.dwLowDateTime  = fileInfo.ftLastWriteTime.dwLowDateTime;
47         this->ftLastWriteTime.dwHighDateTime = fileInfo.ftLastWriteTime.dwHighDateTime;
48         this->dwFileSizeHigh = fileInfo.nFileSizeHigh;
49         this->dwFileSizeLow  = fileInfo.nFileSizeLow;
50
51         // \83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý
52         HANDLE hFile = ::CreateFile( filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
53         if( hFile == INVALID_HANDLE_VALUE )
54                 return false;
55
56         if( this->dwFileSizeLow != 0 )          // 32bit\82Ü\82Å\82Ì\83T\83C\83Y(2GB)\82µ\82©\93Ç\82Ü\82È\82¢\82¯\82Ç\82¢\82¢\82â\82Ë (High\82Í\96³\8e\8b)
57         {
58                 DWORD dwReadSize = 0;
59                 this->pData = (BYTE*) malloc( this->dwFileSizeLow );
60         
61                 if( ! ::ReadFile( hFile, (void*)this->pData, this->dwFileSizeLow, &dwReadSize, NULL ) || dwReadSize != this->dwFileSizeLow )
62                 {
63                         CloseHandle( hFile );
64                         return false;
65                 }
66         }
67
68         // \83t\83@\83C\83\8b\82ð\95Â\82\82é
69         CloseHandle( hFile );
70         return true;
71 }
72
73 void    CFile::GetExt( LPCTSTR filename, LPTSTR ext )
74 {
75         TCHAR strFullPath[_MAX_PATH], strExt[_MAX_EXT], *p;
76
77         if( ! ::GetFullPathName( filename, _MAX_PATH, strFullPath, NULL ) )
78         {
79                 ext[0] = _T('\0');
80                 return;
81         }
82         
83         _tsplitpath_s( strFullPath, NULL, 0, NULL, 0, NULL, 0, strExt, _MAX_EXT );
84         p = &(strExt[0]);
85         if( *p == _T('.') )
86                 p++;
87
88         lstrcpyn( ext, p, _MAX_EXT );
89 }
90
91         }//General
92 }//FDK