Я пытаюсь создать программу, которая имитирует создание папок и файлов.Я создал папку класса, которая имеет атрибут Folder *prev
, который должен указывать на родительскую папку.
Проблема в том, что каждая папка, которую я создаю, всегда указывает на текущую папку.Пожалуйста, проверьте функции cd()
и mkdir()
.
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <String>
#include <stdio.h>
using namespace std;
int MAX_PER_FOLDER = 100;
int MAX_FILES_PER_FOLDER = 100;
struct File;
class Folder {
public:
Folder() {}
string name;
int nFolders;
int nFiles;
File *files;
Folder *folders;
Folder * prev;
};
struct File {
string name;
int size;
Folder *folder;
string data;
};
void ls(Folder root) {
for (int i = 0; i < root.nFolders; i++) {
Folder temp = root.folders[i];
std::cout << " - " << temp.name << endl;
}
}
void mkdir(string name, Folder ¤t) {
Folder *temp = new Folder();
temp->name = name;
temp->prev = ¤t;
temp->nFolders = 0;
temp->nFiles = 0;
temp->folders = new Folder[MAX_PER_FOLDER];
temp->files = new File[MAX_FILES_PER_FOLDER];
current.folders[current.nFolders] = *temp;
current.nFolders++;
}
void cfile(string name, Folder ¤t, string data) {
File temp;
temp.name = name;
temp.folder = ¤t;
temp.data = data;
current.files[current.nFiles] = temp;
current.nFiles++;
}
void cd(string name, Folder ¤t) {
bool found = false;
if (name == ".." && current.prev != NULL) {
cout << "====";
current = *current.prev;
cout << "---";
found = true;
}
else {
for (int i = 0; i < current.nFolders; i++) {
Folder f = current.folders[i];
if (f.name == name) {
current = f;
found = true;
break;
}
}
}
if (found) {
cout << "Current dir: " << current.name << endl;
}
else
cout << "Directory does not exist" << endl;
}
int main()
{
Folder root = Folder();
root.folders = new Folder[MAX_PER_FOLDER];
root.nFiles = 0;
root.nFolders = 0;
root.prev = NULL;
root.name = "root";
mkdir("Test1", root);
mkdir("Test2", root);
mkdir("Test3", root);
ls(root);
cd("Test3", root);
mkdir("Test3.1", root);
mkdir("Test3.2", root);
mkdir("Test3.3", root);
ls(root);
cd("Test3.1", root);
mkdir("Test3.1.2", root);
mkdir("Test3.1.3", root);
mkdir("Test3.1.4", root);
cd("Test3.1.2", root);
cd("..", root);
ls(root);
system("PAUSE");
return 0;
}
Проблема в том, что все созданные папки всегда указывают на текущую папку, установленную cd()
, я полагаю, что она существует в следующей строке:temp->prev = ¤t;
при создании папки, поскольку, возможно, она указывает только на один адрес, который является адресом текущей папки.
Спасибо!