模拟文件管理系统代码
时间: 2023-08-06 17:16:59 浏览: 135
以下是一个简单的C语言模拟文件管理系统的代码,包括文件和目录的创建、删除、重命名、查找等基本操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 128
#define MAX_FILE_NUM 1024
#define MAX_DIR_NUM 1024
typedef struct {
char name[MAX_NAME_LEN];
char content[MAX_NAME_LEN];
int size;
int type; // 0: 文件, 1: 目录
int parent; // 父目录的下标
} File;
File files[MAX_FILE_NUM];
int file_num = 0;
int dir_num = 1; // 根目录下标为0
void create_file(char *name, char *content, int size, int type, int parent) {
if (file_num >= MAX_FILE_NUM) {
printf("Error: file number exceeds the limit!\n");
return;
}
if (strlen(name) >= MAX_NAME_LEN) {
printf("Error: file name too long!\n");
return;
}
strcpy(files[file_num].name, name);
strcpy(files[file_num].content, content);
files[file_num].size = size;
files[file_num].type = type;
files[file_num].parent = parent;
file_num++;
}
void delete_file(int index) {
if (index < 0 || index >= file_num) {
printf("Error: invalid file index!\n");
return;
}
if (files[index].type == 1) {
printf("Error: cannot delete a directory!\n");
return;
}
memmove(&files[index], &files[index+1], sizeof(File) * (file_num - index - 1));
file_num--;
}
void rename_file(int index, char *new_name) {
if (index < 0 || index >= file_num) {
printf("Error: invalid file index!\n");
return;
}
if (strlen(new_name) >= MAX_NAME_LEN) {
printf("Error: file name too long!\n");
return;
}
strcpy(files[index].name, new_name);
}
int find_file(char *name, int parent) {
for (int i = 0; i < file_num; i++) {
if (strcmp(files[i].name, name) == 0 && files[i].parent == parent) {
return i;
}
}
return -1;
}
void create_dir(char *name, int parent) {
if (dir_num >= MAX_DIR_NUM) {
printf("Error: directory number exceeds the limit!\n");
return;
}
if (strlen(name) >= MAX_NAME_LEN) {
printf("Error: directory name too long!\n");
return;
}
create_file(name, "", 0, 1, parent);
dir_num++;
}
void delete_dir(int index) {
if (index < 0 || index >= file_num) {
printf("Error: invalid directory index!\n");
return;
}
if (files[index].type == 0) {
printf("Error: cannot delete a file!\n");
return;
}
for (int i = 0; i < file_num; i++) {
if (files[i].parent == index) {
delete_file(i);
i--;
}
}
delete_file(index);
dir_num--;
}
void rename_dir(int index, char *new_name) {
if (index < 0 || index >= file_num) {
printf("Error: invalid directory index!\n");
return;
}
if (strlen(new_name) >= MAX_NAME_LEN) {
printf("Error: directory name too long!\n");
return;
}
rename_file(index, new_name);
}
void list_files(int parent) {
printf("Name\tType\tSize\tContent\n");
for (int i = 0; i < file_num; i++) {
if (files[i].parent == parent) {
printf("%s\t%s\t%d\t%s\n", files[i].name, files[i].type == 0 ? "file" : "dir", files[i].size, files[i].content);
}
}
}
int main() {
create_dir("root", -1);
create_file("test.txt", "hello world!", 12, 0, 0);
create_dir("subdir", 0);
list_files(0);
delete_dir(1);
list_files(0);
return 0;
}
```
注:以上代码仅为示例,可能存在一些不足之处,仅供参考。