QStringList StorageGroup::GetFileList(QString Path, bool recursive) { QStringList files; QString tmpDir; QDir d; for (QStringList::Iterator it = m_dirlist.begin(); it != m_dirlist.end(); ++it) { tmpDir = *it + Path; d.setPath(tmpDir); if (d.exists()) files << GetDirFileList(tmpDir, Path, recursive); } return files; }
QStringList StorageGroup::GetDirFileList(QString dir, QString base, bool recursive) { QStringList files; QDir d(dir); if (!d.exists()) return files; if (base.split("/").size() > 20) { LOG(VB_GENERAL, LOG_ERR, LOC + "GetDirFileList(), 20 levels deep, " "possible directory loop detected."); return files; } if (!base.isEmpty()) base += "/"; if (recursive) { QStringList list = d.entryList(QDir::Dirs|QDir::NoDotAndDotDot|QDir::Readable); for (QStringList::iterator p = list.begin(); p != list.end(); ++p) { LOG(VB_FILE, LOG_DEBUG, LOC + QString("GetDirFileList: Dir: %1/%2").arg(base).arg(*p)); files << GetDirFileList(dir + "/" + *p, base + *p, true); } } QStringList list = d.entryList(QDir::Files|QDir::Readable); for (QStringList::iterator p = list.begin(); p != list.end(); ++p) { LOG(VB_FILE, LOG_DEBUG, LOC + QString("GetDirFileList: File: %1%2").arg(base).arg(*p)); if (recursive) files.append(base + *p); else files.append(*p); } return files; }
void CopyDir(std::string from_dir_name, std::string to_dir_name, bool copy_this) { try{ if (false == AccessDir(from_dir_name)) { return; } // 防止拷贝自己 if (from_dir_name == to_dir_name) { return; } if ( AccessDir(to_dir_name) == false) MakeDir(to_dir_name); std::list<std::string> file_list; GetDirFileList(from_dir_name, file_list); for (std::list<std::string>::iterator it = file_list.begin(); it != file_list.end(); ++it) { std::string new_name = *it; std::string file_name = new_name.substr(from_dir_name.size() + (boost::filesystem::current_path()).string().length()); new_name = to_dir_name + file_name; FMove(from_dir_name + "\\" + file_name, new_name, false); } //std::cout <<"CopyDir\n"; } catch(boost::filesystem::filesystem_error e) { //std::cout <<"CopyDir crash\n"; } }