所以,我正在为我的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;
}
答案 0 :(得分:0)
首先,您不会返回任何内容(缺少return tempHold;
)。
其次,您没有正确使用readdir()
。它返回struct dirent
,其中包含有关其找到的文件的信息。您需要将文件名附加到您传入的目录名称,以便创建完整路径。
第三,您需要通过调用closedir()
对象上的DIR *
来避免资源泄漏。
最后,您应该添加一些错误检查(如果您没有指定目录,opendir()
将失败),它将帮助您的开发人员在日志文件或其他内容中查看这些错误消息。