FILE_ITEM CFileTree::AddItem(char *absolutePath, unsigned char* handle) { FILE_ITEM item; item.handle = handle; item.bCached = false; if (filesTree.empty()) { item.path = new char[strlen(absolutePath) + 1]; strcpy_s(item.path, (strlen(absolutePath) + 1), absolutePath); item.nPathLen = strlen(item.path); filesTree.set_head(item); topNode = filesTree.begin(); } else { std::string sPath(absolutePath); tree_node_<FILE_ITEM>* parentNode = findParentNodeFromRootForPath(absolutePath); std::string splittedPath = sPath.substr(sPath.find_last_of('\\') + 1); item.path = new char[splittedPath.length() + 1]; strcpy_s(item.path, (splittedPath.length() + 1), splittedPath.c_str()); if (parentNode) { filesTree.append_child(tree<FILE_ITEM>::iterator_base(parentNode), item); } else { //printf("Parent node found for %s", absolutePath); } } DisplayTree(topNode.node, 0); return item; }
FILE_ITEM CFileTree::AddItem(char *absolutePath, unsigned char* handle) { FILE_ITEM item; item.handle = handle; item.bCached = false; // If the tree is empty just add the new path as node on the top level. if (filesTree.empty()) { item.path = new char[strlen(absolutePath) + 1]; strcpy_s(item.path, (strlen(absolutePath) + 1), absolutePath); item.nPathLen = strlen(item.path); filesTree.set_head(item); topNode = filesTree.begin(); } else { // Check if the requested path belongs to an already registered parent node. std::string sPath(absolutePath); tree_node_<FILE_ITEM>* parentNode = findParentNodeFromRootForPath(absolutePath); std::string splittedPath = _basename_932(sPath); //printf("spl %s %s\n", splittedPath.c_str(), absolutePath); item.path = new char[splittedPath.length() + 1]; strcpy_s(item.path, (splittedPath.length() + 1), splittedPath.c_str()); // If a parent was found use th parent. if (parentNode) { //printf("parent %s\n", parentNode->data.path); filesTree.append_child(tree<FILE_ITEM>::iterator_base(parentNode), item); } else { // Node wasn't found - most likely a new root - add it to the top level. //printf("No parent node found for %s. Adding new sibbling.", absolutePath); item.path = new char[strlen(absolutePath) + 1]; strcpy_s(item.path, (strlen(absolutePath) + 1), absolutePath); item.nPathLen = strlen(item.path); filesTree.insert(tree<FILE_ITEM>::iterator_base(topNode), item); topNode = filesTree.begin(); } } DisplayTree(topNode.node, 0); return item; }
void CFileTree::RenameItem(char *absolutePathFrom, char *absolutePathTo) { tree_node_<FILE_ITEM>* node = findNodeFromRootWithPath(absolutePathFrom); tree_node_<FILE_ITEM>* parentNode = findParentNodeFromRootForPath(absolutePathTo); if (parentNode != NULL && node != NULL) { if (filesTree.number_of_children(parentNode) < 1) { FILE_ITEM emptyItem; emptyItem.nPathLen = 0; emptyItem.path = const_cast<char*>(""); filesTree.append_child(tree<FILE_ITEM>::iterator_base(parentNode), emptyItem); } tree<FILE_ITEM>::iterator firstChild = filesTree.begin(parentNode); filesTree.move_after(firstChild, tree<FILE_ITEM>::iterator(node)); std::string sPath(absolutePathTo); std::string splittedPath = sPath.substr(sPath.find_last_of('\\') + 1); node->data.path = new char[splittedPath.length() + 1]; strcpy_s(node->data.path, (splittedPath.length() + 1), splittedPath.c_str()); } DisplayTree(topNode.node, 0); }