所以,我正在为我的C++课程做一个项目。我正在制作音乐播放器,但有一些问题,从一个文件夹读取。我当前正在从文本文件中读取歌曲名称,但我希望从文件夹中的文件中读取名称。旧代码:
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;
}无法工作的新代码(这是我需要帮助的代码)
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;
}
}我现在又做了一次尝试
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;
}发布于 2015-03-20 21:55:59
首先,您不返回任何内容(缺少return tempHold;)。
其次,您没有正确使用readdir()。它返回一个struct dirent,其中包含找到的文件的相关信息。为了创建完整路径,您需要将文件名附加到传入的目录名之后。
第三,您需要通过在DIR *对象上调用closedir()来避免资源泄漏。
最后,您应该添加一些错误检查(如果您不指定目录,opendir()将失败),它将帮助您的开发在日志文件或其他文件中看到这些错误消息。
https://stackoverflow.com/questions/29167972
复制相似问题