1 //标记歌曲信息的结构体
2 typedef struct _MP3_ID3v1_STRUCT
3 {
4 char Header[4]; /*标签头必须是"TAG"否则认为没有标签*/
5 char Title[31]; /*标题*/
6 char Artist[31]; /*作者*/
7 char Album[31]; /*专集*/
8 char Year[5]; /*出品年代*/
9 char Comment[29]; /*备注*/
10 char reserve; /*保留*/
11 char track;; /*音轨*/
12 char Genre; /*类型*/
13 }MP3_ID3v1_STRUCT,* pMP3_ID3v1_STRUCT;
14
15
16 void CMp3RenameDlg::OnBnSelectDir()
17 {
18 SelectDir();
19 //SelectFile();
20 //SelectFileMore();
21 //SelectFileOrDir();
22 m_EditDir.SetWindowText(m_strDir);
23 }
24
25 void CMp3RenameDlg::OnBnClickedOk()
26 {
27 if(m_strDir.IsEmpty())
28 {
29 return;
30 }
31
32 WIN32_FIND_DATA FindFileData;
33 TCHAR szSearchFormat[MAX_PATH];
34 wsprintf(szSearchFormat,_T("%s\\*.mp3"),m_strDir.GetString());
35 HANDLE hFind = FindFirstFile(szSearchFormat,&FindFileData);
36 if( hFind != INVALID_HANDLE_VALUE )
37 {
38 do
39 {
40 if( hFind == INVALID_HANDLE_VALUE )
41 {
42 return;
43 }
44 Rename(m_strDir.GetBuffer(),FindFileData.cFileName);
45 } while (FindNextFile(hFind, &FindFileData));
46 }
47 }
48
49
50 void CMp3RenameDlg::SelectDir()
51 {
52 /*
53 使用 BROWSEINFO 打开获取文件夹路径
54 */
55 TCHAR szBuffer[MAX_PATH] = {0};
56 BROWSEINFO bi;
57 ZeroMemory(&bi,sizeof(BROWSEINFO));
58 bi.hwndOwner = NULL;
59 bi.pszDisplayName = szBuffer;
60 bi.lpszTitle = _T("选择文件夹");
61 bi.ulFlags = BIF_RETURNFSANCESTORS;
62 LPITEMIDLIST idl = SHBrowseForFolder(&bi);
63 if( NULL == idl )
64 {
65 return;
66 }
67 SHGetPathFromIDList(idl, szBuffer);
68 m_strDir = szBuffer;
69 }
70
71 void CMp3RenameDlg::SelectFile()
72 {
73 /*
74 使用 CFileDialog 选择单个文件
75 */
76 CFileDialog dlg = CFileDialog(FALSE,NULL,NULL,OFN_READONLY,_T("音频文件(*.mp3)|*.mp3|音频文件(*.wav)|*.wav||",this));
77 if( dlg.DoModal() == IDOK )
78 {
79 m_strDir = dlg.GetPathName();
80 }
81
82 /*
83 使用 OPENFILENAME 选择单个文件
84 */
85 TCHAR szBuffer[MAX_PATH] = {0};
86 OPENFILENAME ofn;
87 ZeroMemory(&ofn,sizeof(OPENFILENAME));
88 ofn.lStructSize = sizeof(ofn);
89 ofn.hwndOwner = m_hWnd;
90 ofn.lpstrFilter = _T("音频文件(*.mp3)\0*.mp3\0音频文件(*.wav)\0*.wav)");
91 ofn.lpstrInitialDir = _T("D:\\");
92 ofn.lpstrFile = szBuffer;
93 ofn.nMaxFile = MAX_PATH;
94 ofn.nFilterIndex = 1;
95 ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;
96
97 bool bRet = GetOpenFileName(&ofn);
98
99 m_strDir = szBuffer;
100
101 }
102
103 void CMp3RenameDlg::SelectFileMore()
104 {
105 /*
106 使用 OPENFILENAME 选择多个文件
107 */
108 TCHAR szBuffer[MAX_PATH] = {0};
109 OPENFILENAME ofn;
110 ZeroMemory(&ofn,sizeof(OPENFILENAME));
111 ofn.lStructSize = sizeof(ofn);
112 ofn.hwndOwner = m_hWnd;
113 ofn.lpstrFilter = _T("音频文件(*.mp3)|音频文件(*.wav)");
114 ofn.lpstrInitialDir = _T("D:\\");
115 ofn.lpstrFile = szBuffer;
116 ofn.nMaxFile = MAX_PATH;
117 ofn.nFilterIndex = 0;
118 ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ALLOWMULTISELECT;
119
120 bool bRet = GetOpenFileName(&ofn);
121
122 m_strDir = szBuffer;
123 }
124
125 void CMp3RenameDlg::SelectFileOrDir()
126 {
127 /*
128 使用 BROWSEINFO 选择文件或者文件夹
129 */
130 TCHAR szBuffer[MAX_PATH] = {0};
131 BROWSEINFO bi;
132 ZeroMemory(&bi,sizeof(BROWSEINFO));
133 bi.hwndOwner = NULL;
134 bi.pszDisplayName = szBuffer;
135 bi.lpszTitle = _T("选择文件夹或者文件夹");
136 bi.ulFlags = BIF_BROWSEINCLUDEFILES;
137 LPITEMIDLIST idl = SHBrowseForFolder(&bi);
138 if( NULL == idl )
139 {
140 return;
141 }
142 SHGetPathFromIDList(idl, szBuffer);
143 m_strDir = szBuffer;
144 }
145
146 void CMp3RenameDlg::Rename(char* szDir, char* szFile)
147 {
148 TCHAR szFileName[MAX_PATH] = {0};
149 wsprintf(szFileName, "%s\\%s",szDir,szFile);
150
151 FILE* fp = fopen(szFileName,_T("r+b"));
152 if( NULL == fp )
153 {
154 return;
155 }
156
157 MP3_ID3v1_STRUCT stMp3Info;
158 ZeroMemory(&stMp3Info,sizeof(MP3_ID3v1_STRUCT));
159 fseek(fp,-128L,SEEK_END);
160 fread(&stMp3Info.Header,3,1,fp);
161 if(strcmp(stMp3Info.Header,"TAG")!=0)
162 {
163 return ;
164 }
165 fread(&(stMp3Info.Title),30,1,fp);
166 fread(&(stMp3Info.Artist),30,1,fp);
167 fread(&(stMp3Info.Album),30,1,fp);
168 fread(&(stMp3Info.Year),4,1,fp);
169 fread(&(stMp3Info.Comment),28,1,fp);
170 fclose(fp);
171
172 TCHAR szFileNameNew[MAX_PATH] = {0};
173 wsprintf(szFileNameNew,"%s\\%s.mp3", szDir, stMp3Info.Title);
174
175 int nRet = rename(szFileName, szFileNameNew);
176 if( nRet == 0 )
177 {
178
179 }
180 else
181 {
182
183 }
184 }