输入一个文件夹,遍历mp3文件。代码有什么问题?


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <mmsystem.h>
#include <iostream>
#include <iomanip>
#include <vector>
#include <fstream>



class MP3
{
public:
     MCI_OPEN_PARMS mciOpen;         // 一个结构体,用来存储打开音频文件后的一些信息
    MCIERROR open(const *pFilename)
    {      UINT wDeviceID;                 // 音频文件标识,打开音频文件后需要保存这个标识,以便可以进行其他操作,UINT是unsigned int
           mciOpen.lpstrDeviceType = NULL; // 指示打开的文件是哪一种类型,NULL表示由打开的文件自动判断
           mciOpen.lpstrElementName = pFilename;  // 即将播放的音频文件
           return mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD_PTR)&mciOpen);     // 打开音频文件
    }
    void play()
    {
    printf("开始播放...\n");

        MCI_PLAY_PARMS mciPlay;         // 一个结构体,用来存放播放音频时的信息
       mciSendCommand(mciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD_PTR)&mciPlay);   // 播放音频文件

    // 获取音频总时间
       MCI_STATUS_PARMS mciStatus;     // 一个结构体,用来存放播放时的参数信息
       mciStatus.dwItem = MCI_STATUS_LENGTH;   // 获取音频总时间的参数标志
       mciSendCommand(mciOpen.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD_PTR)(LPVOID)&mciStatus);  // 获取参数
       DWORD music_alltime = mciStatus.dwReturn / 1000; //音乐总时间

    // 循环显示播放时间
    while (1)
    {
        // 获取音频播放的当前时间
        //MCI_STATUS_PARMS mciStatus;
        mciStatus.dwItem = MCI_STATUS_POSITION; // 获取音频当前时间的参数标志
        mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD_PTR)(LPVOID)&mciStatus);  // 获取参数
        DWORD music_timeing = mciStatus.dwReturn / 1000; //音乐当前播放时间
        // 显示
        printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); // 用20个回退键清除同一行的显示
        printf("Time:%ld:%02ld-%ld:%02ld", music_timeing / 60, music_timeing % 60, music_alltime / 60, music_alltime % 60); // 显示当前时间和总时间
        if (music_timeing >= music_alltime )|| kbhit())// 当当前时间达到总时间或有键按下即退出循环
        {
            while (kbhit()) getch();    // 清除按键信息
            break;  // 退出循环
        }
        Sleep(50);  // 延迟50毫秒,让CPU休息一下
    }
     mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0); // 关闭音频文件
    }

};

class MyFile()
{
private:
    vector<string>mylist;
public:
    void find(const char *path,const char *name)
    {
        char szFind[MAX_PATH],szFile[MAX_PATH];
        WIN32_FIND_DATA fd;
        sprintf(szFind,"%s\\%s",path,name);
        HANDLE hFind=FindFirstFile(szFind,&fd);
        if(INVALID_HANDLE_VALUE!=hFind)
            { int num=0;
                 while(1)
                {      printf("\n%s\\%s\n",path,fd.cFileName);
                        num++;
                        if(!FindNextFile(hFind,&fd))
                            break;
                }
                FindClose(hFind);
            }
    }
    void display()
    {
        int i=1;
        for(vector<string>::iterator it=mylist.begin();it!=mylist.end();++it)
        {
            cout<<"("<<i++<<")"<<*it<<endl;
        }
    }
    string get (int i)
    {
        return mylist[i];
    }

};
int main()
{
    string spath;
    cout<<"请输入路径;";
    getline(cin,spath);
    MyFile myfile;
    myfile.find(spath.c_str(),"*.mp3");
    while(1)
    {
        int n;
        myfile.display();
        cout<<"请输入序号(输入0结束)";
        cin>>n;
        if(n==0) break;
        MP3 mp3;
        if(mp3.open((spath+"\\"+myfile.get(n-1)).c_str())==0)
        {
            cout<<"开始播放["+myfile.get(n-1)+"]..."<<endl;
            mp3.play();
            cout<<endl;
        }
    printf("\n结束\n");
    return 0;
}