C语言写一个有目录增加删除的文件管理系统
时间: 2024-05-07 12:23:23 浏览: 8
下面是一个简单的文件管理系统的实现,包括目录的增加和删除功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_FILE_NUM 100 // 最多支持的文件数
#define MAX_FILE_NAME_LEN 20 // 文件名最大长度
#define MAX_DIR_NAME_LEN 20 // 目录名最大长度
struct file {
char name[MAX_FILE_NAME_LEN]; // 文件名
int size; // 文件大小
};
struct directory {
char name[MAX_DIR_NAME_LEN]; // 目录名
struct file files[MAX_FILE_NUM]; // 目录下的文件
int count; // 目录下文件数量
};
struct directory dirs[MAX_FILE_NUM]; // 所有目录
int dir_count = 0; // 目录计数器
// 查找目录
int find_dir(char *name) {
for (int i = 0; i < dir_count; i++) {
if (strcmp(name, dirs[i].name) == 0) {
return i;
}
}
return -1;
}
// 查找文件
int find_file(struct directory *dir, char *name) {
for (int i = 0; i < dir->count; i++) {
if (strcmp(name, dir->files[i].name) == 0) {
return i;
}
}
return -1;
}
// 增加目录
void add_dir(char *name) {
if (find_dir(name) != -1) {
printf("Directory %s already exists.\n", name);
return;
}
struct directory new_dir;
strcpy(new_dir.name, name);
new_dir.count = 0;
dirs[dir_count++] = new_dir;
printf("Directory %s added successfully.\n", name);
}
// 删除目录
void del_dir(char *name) {
int idx = find_dir(name);
if (idx == -1) {
printf("Directory %s does not exist.\n", name);
return;
}
for (int i = idx; i < dir_count - 1; i++) {
dirs[i] = dirs[i + 1]; // 删除目录
}
dir_count--;
printf("Directory %s deleted successfully.\n", name);
}
// 增加文件
void add_file(char *dir_name, char *file_name, int size) {
int idx = find_dir(dir_name);
if (idx == -1) {
printf("Directory %s does not exist.\n", dir_name);
return;
}
struct directory *dir = &dirs[idx];
if (find_file(dir, file_name) != -1) {
printf("File %s already exists in directory %s.\n", file_name, dir_name);
return;
}
if (dir->count >= MAX_FILE_NUM) {
printf("Directory %s is full, cannot add file %s.\n", dir_name, file_name);
return;
}
struct file new_file;
strcpy(new_file.name, file_name);
new_file.size = size;
dir->files[dir->count++] = new_file;
printf("File %s added to directory %s successfully.\n", file_name, dir_name);
}
// 删除文件
void del_file(char *dir_name, char *file_name) {
int idx = find_dir(dir_name);
if (idx == -1) {
printf("Directory %s does not exist.\n", dir_name);
return;
}
struct directory *dir = &dirs[idx];
int file_idx = find_file(dir, file_name);
if (file_idx == -1) {
printf("File %s does not exist in directory %s.\n", file_name, dir_name);
return;
}
for (int i = file_idx; i < dir->count - 1; i++) {
dir->files[i] = dir->files[i + 1]; // 删除文件
}
dir->count--;
printf("File %s deleted from directory %s successfully.\n", file_name, dir_name);
}
int main() {
add_dir("root");
add_dir("home");
add_file("root", "file1", 100);
add_file("root", "file2", 200);
add_file("home", "file3", 300);
del_file("root", "file1");
del_dir("root");
return 0;
}
```
这个程序使用了两个结构体 `file` 和 `directory`,分别表示文件和目录。其中,每个目录下最多支持100个文件,文件名最大长度为20,目录名最大长度也为20。程序主要包括增加目录、删除目录、增加文件和删除文件四个功能,使用时只需要调用相应的函数即可。