bool MDir::createDir(const MString &dirName) { // process multi "//" to one "/" MString dn = dirName; dn.push_back('/'); dn.replace("//", "/"); int index = dn.startWith("/") ? 1 : 0; for (unsigned int i = index; i < dn.size(); ++i) { char &c = dn[i]; if (c == '/') { c = '\0'; int ret = access(dn.c_str(), F_OK); if (ret == 0) { c = '/'; continue; } ret = mkdir(dn.c_str(), 0744); if (ret == 0) { c = '/'; continue; } // if (errno == ENOENT) { // ret = mkdir(dn.c_str(), 0744); // if (ret == 0) { // continue; // } // } merrno = errno; return false; } } return true; }