#include <stdio.h> #include <stdlib.h> #include <string.h>

#define MAX_NAME_LENGTH 50 #define MAX_FILE_NUM 100

typedef struct { char name[MAX_NAME_LENGTH]; int is_dir; int parent_dir; } file;

file files[MAX_FILE_NUM]; int file_count = 0;

void init_files() { file root = {'root', 1, -1}; files[file_count++] = root; }

int find_file(char* name, int parent_dir) { for (int i = 0; i < file_count; i++) { if (strcmp(files[i].name, name) == 0 && files[i].parent_dir == parent_dir) { return i; } } return -1; }

void create_file(char* name, int is_dir, int parent_dir) { if (file_count >= MAX_FILE_NUM) { printf('Too many files!\n'); return; } if (find_file(name, parent_dir) != -1) { printf('File already exists!\n'); return; } file new_file = {0}; strcpy(new_file.name, name); new_file.is_dir = is_dir; new_file.parent_dir = parent_dir; files[file_count++] = new_file; }

void list_files(int parent_dir) { printf('%-20s%-10s\n', 'Name', 'Type'); for (int i = 0; i < file_count; i++) { if (files[i].parent_dir == parent_dir) { printf('%-20s%-10s\n', files[i].name, files[i].is_dir ? 'Directory' : 'File'); } } }

void delete_file(char* name, int parent_dir) { int index = find_file(name, parent_dir); if (index == -1) { printf('File not found!\n'); return; } if (files[index].is_dir) { for (int i = 0; i < file_count; i++) { if (files[i].parent_dir == index) { delete_file(files[i].name, index); } } } for (int i = index; i < file_count - 1; i++) { files[i] = files[i + 1]; } file_count--; }

int main() { init_files(); int current_dir = 0; while (1) { printf('Current directory: %s\n', files[current_dir].name); printf('1. Create file\n'); printf('2. List files\n'); printf('3. Change directory\n'); printf('4. Delete file\n'); printf('5. Exit\n'); int choice; printf('Enter your choice: '); scanf('%d', &choice); if (choice == 1) { char name[MAX_NAME_LENGTH]; int is_dir; printf('Enter file name: '); scanf('%s', name); printf('Is it a directory? (1 for yes, 0 for no): '); scanf('%d', &is_dir); create_file(name, is_dir, current_dir); } else if (choice == 2) { list_files(current_dir); } else if (choice == 3) { char name[MAX_NAME_LENGTH]; printf('Enter directory name: '); scanf('%s', name); int index = find_file(name, current_dir); if (index == -1) { printf('Directory not found!\n'); } else if (!files[index].is_dir) { printf('%s is not a directory!\n', name); } else { current_dir = index; } } else if (choice == 4) { char name[MAX_NAME_LENGTH]; printf('Enter file name: '); scanf('%s', name); delete_file(name, current_dir); } else if (choice == 5) { break; } else { printf('Invalid choice!\n'); } } return 0; }

C语言实现二级文件管理系统

原文地址: https://www.cveoy.top/t/topic/f1wA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录