bool addNewFile(string fileName, string address, string owner) { if (isSaved(fileName)) throw accessError(SAVED); if (!isExisting(address)) throw accessError(NO_FILE); string fileDirectory = getFilePath(fileName); ifstream fileToCopy(address); char c; if (mkdir(fileDirectory.c_str())) throw accessError(ERR_CR_DIR); //error creating directory ofstream fileToCreate(fileDirectory + '\\' + fileName); while (true) { c = fileToCopy.get(); if (!fileToCopy.eof()) fileToCreate.put(c); else break; } fileToCopy.close(); fileToCreate.close(); createPermFile(fileName, owner); createDiffFile(fileName); return true; }
void* PageFileManager::readPage(uint64_t pageId) { if (!isExisting(pageId)) { createPage(pageId); } const off_t offset = pageId * _pageSize; char* buffer = new char[_pageSize]; if (lseek(_fd, offset, SEEK_SET) < 0) { perror("lseek"); //@todo throw //throw 42; assert(false); } size_t readBytes = read(_fd, buffer, _pageSize); if (readBytes != _pageSize) { perror("read"); fprintf(stderr, "readBytes: %lu pageSize: %lu\n", readBytes, _pageSize); //@todo throw //throw 42; assert(false); } return buffer; }
void PageFileManager::writePage(uint64_t pageId, void* data) { if (!isExisting(pageId)) { createPage(pageId); } const off_t offset = pageId * _pageSize; if (lseek(_fd, offset, SEEK_SET) < 0) { perror("lseek"); //@todo throw //throw 42; assert(false); } LOG(INFO) << "Writing page " << pageId << " data at " << data << " to file at pos " << offset << std::endl; size_t wroteBytes = write(_fd, data, _pageSize); if (wroteBytes != _pageSize) { perror("write"); //@todo throw //throw 42; assert(false); } closePage( pageId, data ); }
bool addExistingFile(string fileName, string address, string owner) { string fileDirectory = getFilePath(fileName); if (!isSaved(fileName)) throw accessError(NOT_SAVED); if (!isExisting(address)) throw accessError(NO_FILE); if (!isAccessable(fileName, owner)) throw accessError(NOT_USER); diffTree tree(fileName); diffNode* start = tree.getTreePathByID(tree.currentVersion); diffNode* finish = tree.getTreePath(); modernizeFile(fileName, tree.getVersionsPath(start, finish)); vector<diffString> exf; vector<diffString> newf; ifstream existingFile(fileDirectory + '\\' + fileName); ifstream newFile(address); while (!existingFile.eof()) { diffString buf; buf.text = new char[MAX]; existingFile.getline(buf.text, MAX); buf.length = strlen(buf.text); exf.push_back(buf); } while (!newFile.eof()) { diffString buf; buf.text = new char[MAX]; newFile.getline(buf.text, MAX); buf.length = strlen(buf.text); newf.push_back(buf); } vector<diffString> difference = diff(exf, newf); showChangesVector(difference); diffNode* child = new diffNode; child->diffLine = difference; tree.addNode(finish, child); ofstream diffFile(fileDirectory + '\\' + fileName + "-diff.dat"); diffFile.close(); tree.printDiffTreeFile(fileName); deleteFile(fileName); addFile(fileName, address); return true; }
void Save::run() { std::ofstream objetfichier; std::string name; ObjectType t; int iter = 1; int i = 1; name = "../maps/"; name = name + this->_name + ".map"; if (isExisting(this->_name) == false) { if (this->_list.size() != 0) { objetfichier.open(name.data(), std::ios::app); for (std::map<int, Object *>::iterator it = this->_list.begin(); it != this->_list.end(); ++it) { t = (*it).second->getType(); if (t == BONUS) t = BONUSRANDOM; else if (t == BONUSCLAYMORE) t = BONUSRANDOM; std::string s = intToString(t); objetfichier.write(reinterpret_cast<const char *>(s.data()), s.size()); if (iter == this->_size) { i++; iter = 0; objetfichier.write(reinterpret_cast<const char *>("\n"), 1); } else objetfichier.write(reinterpret_cast<const char *>(" "), 1); iter++; } objetfichier.close(); errorWindow("Your map is now saved", "information"); } else errorWindow("Your map is not generated", "Save error"); } }