通过编写一个简单的文件管理程序,实现主要的文件操作命令,加深操作系统对于文件目录管理方式的理解。应用文件管理的相关命令完成下列操作:建立文件、建立文件夹、复制文件及文件夹、移动文件及文件夹、删除文件及文件夹、显示文件夹中的内容、查看文件内容、修改文件权限、搜索文件等。 采用二级目录实现文件管理c++
时间: 2023-11-17 18:04:49 浏览: 110
好的,下面我给您提供一个简单的文件管理程序的代码,实现常见的文件操作命令。该程序采用二级目录实现文件管理,使用C++语言编写。
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
struct file {
string name;
string path;
string content;
int mode;
};
struct folder {
string name;
string path;
vector<file> files;
vector<folder> folders;
};
folder root;
void createFile(string path, string name) {
file f;
f.name = name;
f.path = path + "\\" + name;
f.content = "";
f.mode = 0;
root.folders.back().files.push_back(f);
}
void createFolder(string path, string name) {
folder f;
f.name = name;
f.path = path + "\\" + name;
root.folders.back().folders.push_back(f);
}
void copyFile(string from, string to) {
ifstream input(from.c_str(), ios::binary);
ofstream output(to.c_str(), ios::binary);
output << input.rdbuf();
input.close();
output.close();
}
void copyFolder(string from, string to) {
createFolder(to, from.substr(from.find_last_of("\\") + 1));
for (int i = 0; i < root.folders.back().folders.size(); i++) {
copyFolder(from + "\\" + root.folders.back().folders[i].name, to + "\\" + root.folders.back().folders[i].name);
}
for (int i = 0; i < root.folders.back().files.size(); i++) {
copyFile(from + "\\" + root.folders.back().files[i].name, to + "\\" + root.folders.back().files[i].name);
}
}
void moveFile(string from, string to) {
copyFile(from, to);
remove(from.c_str());
}
void moveFolder(string from, string to) {
copyFolder(from, to);
remove(from.c_str());
}
void deleteFile(string path, string name) {
remove((path + "\\" + name).c_str());
}
void deleteFolder(string path, string name) {
for (int i = 0; i < root.folders.back().folders.size(); i++) {
if (root.folders.back().folders[i].name == name) {
for (int j = 0; j < root.folders.back().folders[i].folders.size(); j++) {
deleteFolder(root.folders.back().folders[i].path, root.folders.back().folders[i].folders[j].name);
}
for (int j = 0; j < root.folders.back().folders[i].files.size(); j++) {
deleteFile(root.folders.back().folders[i].path, root.folders.back().folders[i].files[j].name);
}
remove(root.folders.back().folders[i].path.c_str());
root.folders.back().folders.erase(root.folders.back().folders.begin() + i);
break;
}
}
}
void displayFolder(string path) {
cout << "Folders:" << endl;
for (int i = 0; i < root.folders.back().folders.size(); i++) {
cout << root.folders.back().folders[i].name << endl;
}
cout << "Files:" << endl;
for (int i = 0; i < root.folders.back().files.size(); i++) {
cout << root.folders.back().files[i].name << endl;
}
}
void viewFile(string path, string name) {
ifstream input((path + "\\" + name).c_str());
string line;
while (getline(input, line)) {
cout << line << endl;
}
input.close();
}
void modifyMode(string path, string name, int mode) {
chmod((path + "\\" + name).c_str(), mode);
}
void searchFile(string path, string name) {
for (int i = 0; i < root.folders.back().files.size(); i++) {
if (root.folders.back().files[i].name == name) {
cout << root.folders.back().files[i].path << endl;
break;
}
}
for (int i = 0; i < root.folders.back().folders.size(); i++) {
searchFile(root.folders.back().folders[i].path, name);
}
}
int main() {
root.name = "root";
root.path = "";
folder f;
f.name = "home";
f.path = "root\\home";
root.folders.push_back(f);
f.name = "tmp";
f.path = "root\\tmp";
root.folders.push_back(f);
f.name = "var";
f.path = "root\\var";
root.folders.push_back(f);
while (true) {
string cmd, path, name, to, content;
int mode;
cout << ">";
cin >> cmd;
if (cmd == "exit") {
break;
} else if (cmd == "cd") {
cin >> name;
for (int i = 0; i < root.folders.back().folders.size(); i++) {
if (root.folders.back().folders[i].name == name) {
root.folders.push_back(root.folders.back().folders[i]);
break;
}
}
} else if (cmd == "mkdir") {
cin >> name;
createFolder(root.folders.back().path, name);
} else if (cmd == "touch") {
cin >> name;
createFile(root.folders.back().path, name);
} else if (cmd == "cp") {
cin >> name >> to;
for (int i = 0; i < root.folders.back().folders.size(); i++) {
if (root.folders.back().folders[i].name == name) {
copyFolder(root.folders.back().folders[i].path, to);
break;
}
}
for (int i = 0; i < root.folders.back().files.size(); i++) {
if (root.folders.back().files[i].name == name) {
copyFile(root.folders.back().files[i].path, to + "\\" + name);
break;
}
}
} else if (cmd == "mv") {
cin >> name >> to;
for (int i = 0; i < root.folders.back().folders.size(); i++) {
if (root.folders.back().folders[i].name == name) {
moveFolder(root.folders.back().folders[i].path, to);
root.folders.back().folders.erase(root.folders.back().folders.begin() + i);
break;
}
}
for (int i = 0; i < root.folders.back().files.size(); i++) {
if (root.folders.back().files[i].name == name) {
moveFile(root.folders.back().files[i].path, to + "\\" + name);
root.folders.back().files.erase(root.folders.back().files.begin() + i);
break;
}
}
} else if (cmd == "rm") {
cin >> name;
for (int i = 0; i < root.folders.back().folders.size(); i++) {
if (root.folders.back().folders[i].name == name) {
deleteFolder(root.folders.back().path, name);
break;
}
}
for (int i = 0; i < root.folders.back().files.size(); i++) {
if (root.folders.back().files[i].name == name) {
deleteFile(root.folders.back().path, name);
break;
}
}
} else if (cmd == "ls") {
displayFolder(root.folders.back().path);
} else if (cmd == "cat") {
cin >> name;
viewFile(root.folders.back().path, name);
} else if (cmd == "chmod") {
cin >> name >> mode;
modifyMode(root.folders.back().path, name, mode);
} else if (cmd == "find") {
cin >> name;
searchFile(root.path, name);
}
}
return 0;
}
```
以上代码实现了常见的文件管理命令,包括建立文件、建立文件夹、复制文件及文件夹、移动文件及文件夹、删除文件及文件夹、显示文件夹中的内容、查看文件内容、修改文件权限、搜索文件等。您可以在命令行中输入相应的命令进行操作,例如:`mkdir folder1` 建立一个名为 folder1 的文件夹,`touch file1.txt` 建立一个名为 file1.txt 的文件,`cp folder1 folder2` 将 folder1 复制到 folder2 中,`mv folder1 folder2` 将 folder1 移动到 folder2 中,`rm file1.txt` 删除名为 file1.txt 的文件,`ls` 显示当前文件夹中的内容,`cat file1.txt` 查看名为 file1.txt 的文件的内容,`chmod file1.txt 777` 修改名为 file1.txt 的文件的权限为 777,`find file1.txt` 搜索名为 file1.txt 的文件。
阅读全文