int open(const char path[], int) { VNode *node; int error = FileSystem::WalkPath(path, strlen(path), &node); if (error < 0) return error; FileDescriptor *desc; error = node->Open(&desc); if (error < 0) { node->ReleaseRef(); return error; } desc->SetName(path); return OpenHandle(desc); }
void commands_ns::MkFile(FileSystem *fs, int argc, char *argv[], std::ostream& out) { if (argc != 1) { out << "Неправильное количество параметров"<< std::endl; return; } if (strlen(argv[0]) > 41) { out << "Введены некорректные данные" << std::endl; return; }; char *nt[2]; nt[0] = strtok(argv[0], "."); nt[1] = strtok(NULL, ""); char *s = strtok(NULL, ".,-!"); if ((!nt[0]) || (!nt[1]) || (s)) { out << "Введены некорректные данные" << std::endl; return; } if (fs->names_types(nt[0])||fs->names_types(nt[1])) { out << "Введены некорректные данные" << std::endl; return; } FileDescriptor* fd = new FileDescriptor(); fd->SetName(nt[0]); fd->SetType(nt[1]); fd->SetSize(0); fd->SetOffset(0); fs->CreateFile(fd); out << "Файл создан." << std::endl; return; }
void commands_ns::RenFile(FileSystem *fs, int argc, char *argv[], std::ostream& out) { FileIterator* fi = fs->GetIterator(); int i = 0, count = strlen(argv[0]), flag = 1; char *arg_name = new char[count]; if (argc != 2) { out << "Неправильное количество параметров" << std::endl; delete[] arg_name; return; } while (argv[0][i] != '.') { arg_name[i] = argv[0][i]; ++i; if (i > count - 2) { out << "Введены некорректные данные" << std::endl; delete[] arg_name; return; } } if (i == 0) { out << "Введены некорректные данные" << std::endl; delete[] arg_name; return; } arg_name[i] = '\0'; count -= i; ++i; char *arg_type = new char[count]; count = 0; while (argv[0][i]) { arg_type[count] = argv[0][i]; ++i; ++count; } arg_type[count] = '\0'; count = 0; if (fs->names_types(arg_name) || fs->names_types(arg_type)||fs->names_types(argv[1])) { out << "Введены некорректные данные" << std::endl; delete[] arg_name; delete[] arg_type; return; } if (fs->GetFilesCount() != 0) { while (fi->HasNext()) { fi->Next(); FileDescriptor* fd = fi->GetFileDescriptor(); if (strcmpi(fd->GetName(), arg_name) == 0 && strcmpi(fd->GetType(), arg_type) == 0) { if (strcmp(arg_name,argv[1])==0){ out << "Изменение имени прошло успешно" << std::endl; delete[] arg_name; delete[] arg_type; return; } FileIterator* fi2 = fs->GetIterator(); while (fi2->HasNext()) { fi2->Next(); FileDescriptor* fd2 = fi2->GetFileDescriptor(); if (strcmpi(fd2->GetName(), argv[1]) == 0 && strcmpi(fd2->GetType(), arg_type) == 0) { out << "Файл с таким именем и типом уже существует" << std::endl; delete[] arg_name; delete[] arg_type; return; } } flag = 0; fd->SetName(argv[1]); fi->SetFileDescriptor(fd); out << "Изменение имени прошло успешно" << std::endl; delete[] arg_name; delete[] arg_type; return; } ++count; } } if (flag == 1) { out << "Файла в системе не обнаружено" << std::endl; } delete[] arg_name; delete[] arg_type; }