vector<string> File::GetFolders(const string &path) { vector<string> folders; struct dirent* ent = NULL; DIR* pDir; pDir = opendir(path.c_str()); while(NULL != (ent = readdir(pDir))) { string fullpath = path + "/" + ent->d_name; //if(4 == ent->d_type) //在nfs或xfs下,有的目录d_type也是0 if(IsFolder(fullpath)) { if(strcmp(ent->d_name, ".")!=0 && strcmp(ent->d_name, "..")!=0) { folders.push_back(ent->d_name); } } } closedir(pDir); return folders; }
vector<string> fol=GetFolders("/");
函数中是已经得到了目录列表,但是我直接定义了一个vector<string>对象,在return之后直接赋值,这样fol变量里面是没有数据了,为空,这是为什么啊?
有问题,你给了个 File::GetFiles,然后下面调用的是 GetFolders,请问这两者如何联系起来?
谢谢大神慧眼如炬,忙晕了,贴错代码了.
已经改过来了.谢谢
@新手猿: File::GetFolders 是成员函数,语句 vector<string> fol=GetFolders("/") 也是放在 File 的非静态成员函数中调用的吗?
@Launcher: 是在Main方法中调用的.
@Launcher: 是在Main方法中调用的.请问这个会有引起什么错误吗?还是我调用的不对?
@新手猿: 我假设你的代码的全貌是这样:
class File
{
public:
vector<string> GetFolders(const string &path)
{
....
}
};
int main()
{
File file;
vector<string> fol=file.GetFolders("/")
}
@Launcher: 先谢谢大神你的耐心哈.
不过问题依然存在,在GetFolders()里面得到的vector<string> folders是有文件目录列表的,但是我返回出来.vector<string> fol=file.GetFolders("/"). fol里面是空值.
@新手猿:
确实对不起,如果你连自己如何调试代码都不会,我没法帮你,我只能告诉你,下面这段代码在我这里没有任何问题。
class File { public: std::vector<std::string> GetFolders(const string &path) { std::vector<std::string> folders; folders.push_back("1"); folders.push_back("2"); folders.push_back("3"); folders.push_back("4"); return folders; } }; int main() { File file; std::vector<std::string> fol = file.GetFolders("/"); size_t count = fol.size(); return 0; }
我建议你还是看下 std::vector<T> 的源码,注意它的构造函数。