C语言文件系统模拟实现:创建、添加、删除目录和文件
#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 著作权归作者所有。请勿转载和采集!