void CreateJson(std::string dir, std::unique_ptr<WebDAV::Client> &client, wptree *pt)
{
//假设第一层
//if (!client->is_directory(dir));
// {return;}
std::vector<std::string> resources = client->list(dir);
int i = 0;
// wptree pt1;/*一个子结点*/
// int i = 0;
//加入一直都是文件夹的话,没有文件 如果全都是文件/如果有一个文件夹
// wptree node_items;
for (size_t i = 1; i < resources.size(); i++) /*结构顺序是: 母文件夹 pt包含:node1(items),node2(items) 恩是这样的*/
{
wptree node_item; /*一个个文件的属性*/
std::wstring source = ConvertAnsiToWString(resources.at(i));
node_item.put(L"name", source); /*前面是个常量,我这里是个变量?,多加一些map 把子文件件中所有的属性都加进来,但是有没有增删查改功能?本地json*/
std::string fullPath = dir + resources.at(i); //需要用全路径
// std::map<std::string, std::string> info = client->info(resources.at(i));
std::map<std::string, std::string> info = client->info(fullPath);
// info.at("name") = resources.at(i);
std::wstring size = ConvertAnsiToWString(info.at("size"));
std::wstring modified = ConvertAnsiToWString(info.at("modified"));
std::wstring type = ConvertAnsiToWString(info.at("type"));
info.at("name") = resources.at(i);
if (info.at("type") == "") //如果是不是文件夹
{
// wptree pt, pt1, pt2, pt3;
node_item.put(L"size", size);
node_item.put(L"modified", modified);
node_item.put(L"type", type);
wptree node_items;
node_items.push_back(make_pair(L"", node_item));
// item.put(L"name", source);
// wptree pt1;
// pt1.push_back(make_pair(L"", item)); //还必须搞成pair类型的,然后跟map一样加进里面
// pt->put_child(L"Children", node); /*为什么会把名字和格式拆成两部分?*/
// std::string fullpath = dir + info.at("name");
std::size_t pos = info.at("name").find(".");
std::string substr = info.at("name").substr(0,pos);
std::wstring dirname = ConvertAnsiToWString(substr);
// pt->add_child(dirname, node_item);
pt->add_child(dirname, node_items);
}
else
{
node_item.put(L"size", size);
node_item.put(L"modified", modified);
node_item.put(L"type", type);
// node_item.push_back(make_pair(source, node_item));
// item.put(L"name", source);
//如果是文件夹的话,直接在下面加items。
std::wstring dirname = ConvertAnsiToWString(fullPath);
pt->add_child(dirname, node_item);
// dir = dir + info.at("name");
pt = &pt->get_child(dirname, node_item);/*结点之间传递*/
dir = dir + info.at("name");
CreateJson(dir, client, pt);
// int i = 0;
}
}
// std::wstring dirname = ConvertAnsiToWString(dir);
// pt->put_child(dirname, node_items);
//pt应该会不断的再换,加入一直都是路径的话
// pt.put_child(L"Children", pt1);/*那么第二个孩子呢?他结构是什么? 可能跟自己想的不一样*/
// pt = pt1;
/*第二个孩子*/
/* std::wstringstream wstream;
std::wstring wstr;
write_json(wstream, *pt);
wstr = wstream.str();
std::wofstream f;
f.open(L"D:\\ProgramFiles\\project\\GreenValleyCloudPlatform\\x64\\Debug\\json.txt");
f << wstr;
f.close();*/
return;
}