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

#define MAX_FILENAME_LENGTH 100 #define MAX_FILE_COUNT 100 #define MAX_DIR_COUNT 100

typedef struct { char name[MAX_FILENAME_LENGTH]; int size; } File;

typedef struct { char name[MAX_FILENAME_LENGTH]; int file_count; File files[MAX_FILE_COUNT]; } Directory;

typedef struct { int dir_count; Directory dirs[MAX_DIR_COUNT]; } FileSystem;

void print_file(File file) { printf("%s (%d bytes)\n", file.name, file.size); }

void print_directory(Directory dir) { printf("%s:\n", dir.name); for (int i = 0; i < dir.file_count; i++) { printf(" "); print_file(dir.files[i]); } }

void print_filesystem(FileSystem fs) { for (int i = 0; i < fs.dir_count; i++) { print_directory(fs.dirs[i]); } }

int find_directory(FileSystem fs, char* name) { for (int i = 0; i < fs.dir_count; i++) { if (strcmp(fs.dirs[i].name, name) == 0) { return i; } } return -1; }

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

void add_directory(FileSystem* fs, char* name) { if (fs->dir_count >= MAX_DIR_COUNT) { printf("Error: Maximum directory count reached.\n"); return; } int index = find_directory(*fs, name); if (index != -1) { printf("Error: Directory already exists.\n"); return; } Directory dir; strcpy(dir.name, name); dir.file_count = 0; fs->dirs[fs->dir_count] = dir; fs->dir_count++; }

void add_file(FileSystem* fs, char* dir_name, char* name, int size) { int dir_index = find_directory(fs, dir_name); if (dir_index == -1) { printf("Error: Directory not found.\n"); return; } Directory dir = &fs->dirs[dir_index]; if (dir->file_count >= MAX_FILE_COUNT) { printf("Error: Maximum file count reached.\n"); return; } int index = find_file(*dir, name); if (index != -1) { printf("Error: File already exists.\n"); return; } File file; strcpy(file.name, name); file.size = size; dir->files[dir->file_count] = file; dir->file_count++; }

void remove_directory(FileSystem* fs, char* name) { int index = find_directory(*fs, name); if (index == -1) { printf("Error: Directory not found.\n"); return; } for (int i = index; i < fs->dir_count - 1; i++) { fs->dirs[i] = fs->dirs[i + 1]; } fs->dir_count--; }

void remove_file(FileSystem* fs, char* dir_name, char* name) { int dir_index = find_directory(fs, dir_name); if (dir_index == -1) { printf("Error: Directory not found.\n"); return; } Directory dir = &fs->dirs[dir_index]; int index = find_file(*dir, name); if (index == -1) { printf("Error: File not found.\n"); return; } for (int i = index; i < dir->file_count - 1; i++) { dir->files[i] = dir->files[i + 1]; } dir->file_count--; }

int main() { FileSystem fs; fs.dir_count = 0;

add_directory(&fs, "Documents");
add_directory(&fs, "Pictures");
add_directory(&fs, "Music");

add_file(&fs, "Documents", "report.txt", 1024);
add_file(&fs, "Pictures", "vacation.jpg", 2048);
add_file(&fs, "Music", "song.mp3", 4096);

printf("Initial filesystem:\n");
print_filesystem(fs);

remove_file(&fs, "Pictures", "vacation.jpg");

printf("Filesystem after removing vacation.jpg:\n");
print_filesystem(fs);

remove_directory(&fs, "Music");

printf("Filesystem after removing Music directory:\n");
print_filesystem(fs);

return 0;

}


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

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