•         下面是递归遍历目录函数。

    bool scandir(QString dirpath, bool isfullpath, QTextStream& qout)
    {
        //获取这个目录的句柄
        QDir dir(dirpath);

        //如果目录不存在 返回
        if (!dir.exists())
            return false;

        qout << dirpath << endl;

        //获取当前目录下所有的*.mp3文件名列表
        QStringList filelist = dir.entryList(QStringList("*.mp3"), QDir::Files | QDir::NoDotAndDotDot);
        //如果没有*.mp3文件则不创建文件 否则创建文件
        if (!filelist.empty())
        {
            //在当前目录中创建于目录名相同的*.m3u文件
            //如果已经存在 则备份
            if (QFile::exists(dirpath + "/" + dir.dirName() + ".m3u"))
            QFile::rename(dirpath + "/" + dir.dirName() + ".m3u", dirpath + "/" + dir.dirName() + ".m3u" + ".bak");

            QFile m3ufile(dirpath + "/" + dir.dirName() + ".m3u");
            if (m3ufile.open(QIODevice::ReadWrite | QIODevice::Text))
            {
                qout << "creating a m3u file..." << endl;
                QTextStream outfile(&m3ufile);
                outfile << "#EXTM3U" << endl; //写文件头
               //写歌曲列表
               for (int i = 0; i != filelist.size(); ++i)
              {
                   outfile << ((isfullpath) ? (dirpath + "/" + filelist[i]) : filelist[i] ) << endl;
                   qout << ((isfullpath) ? (dirpath + "/" + filelist[i]) : filelist[i] ) << endl;
              }
           }
        }

        //获取当前目录下的所有目录名列表
        QStringList dirlist = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
        for (int i = 0; i != dirlist.size(); ++i)
            scandir(dirpath + "/" + dirlist[i], isfullpath, qout); //对每个目录递归调用此函数

        return true;
    }

            ps:

    • 大巴的文章长度限制太烦了。发点代码的文章都要分很多分。虽然有一个csdn的blog,但是我一直不想把blog搬到太专业的地方去。我觉得,或许业余的才是最快乐的,太专业给人压迫感。
    • 如果这个程序你觉得需要,可以email: camel.young@gmail.com