首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在<dirent.h>中使用目录解析读取文件名

在<dirent.h>中使用目录解析读取文件名
EN

Stack Overflow用户
提问于 2015-03-20 21:42:53
回答 1查看 1K关注 0票数 0

所以,我正在为我的C++课程做一个项目。我正在制作音乐播放器,但有一些问题,从一个文件夹读取。我当前正在从文本文件中读取歌曲名称,但我希望从文件夹中的文件中读取名称。旧代码:

代码语言:javascript
复制
std::vector<Song>tempHold;
string songNames;
string fileName = resourcePath()+"songsFile.txt";
std::ifstream dataIn;
//int wantedSongs = 16;
dataIn.open(fileName.c_str());
if(dataIn.is_open())
{
    while(getline(dataIn,songNames))
    {
        tempHold.push_back(Song(songNames,"Taylor Swift"));
        amount++;
    }

}else{
    std::cout << "error opening file";
    return tempHold;
}

无法工作的新代码(这是我需要帮助的代码)

代码语言:javascript
复制
std::vector<Song>addSongsDir(int &amount)
{
    std::vector<Song>tempHold;
    string aLine;
    string songNames;
    string fileName = "/Users/adambjorkman/Desktop/testmusik";
    DIR * songDir;
    songDir = opendir(fileName.c_str());
    while(readdir(songDir))
    {
        tempHold.push_back(Song(songNames,""));
        std::cout << songNames;
    }
}

我现在又做了一次尝试

代码语言:javascript
复制
std::vector<Song>addSongsDir(int &amount)
{
    std::vector<Song>tempHold;

    string aLine;
    string songNames;
    string fileName = "/Users/adambjorkman/Desktop/testmusik";
    DIR * songDir;
    songDir = opendir(fileName.c_str());
    struct dirent *songDirent;
    if(songDir == NULL)
    {
        throw " No such directory";
    }
    else
    {

        while((songDirent = readdir(songDir)))
        {
            songNames = songDirent->d_name;
            tempHold.push_back(Song(songDirent->d_name,""));
            std::cout << songNames;
        }
    }
    return tempHold;
}
EN

回答 1

Stack Overflow用户

发布于 2015-03-20 21:55:59

首先,您不返回任何内容(缺少return tempHold;)。

其次,您没有正确使用readdir()。它返回一个struct dirent,其中包含找到的文件的相关信息。为了创建完整路径,您需要将文件名附加到传入的目录名之后。

第三,您需要通过在DIR *对象上调用closedir()来避免资源泄漏。

最后,您应该添加一些错误检查(如果您不指定目录,opendir()将失败),它将帮助您的开发在日志文件或其他文件中看到这些错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29167972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档