C语言实现简单文件系统模拟
C语言实现简单文件系统模拟
这篇文章展示了一个使用C语言模拟简单文件系统的程序。该程序可以创建、删除文件和目录,并支持打印文件系统结构。程序使用结构体来表示文件、目录和整个文件系统。
代码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) ', file.name, file.size);}
// 打印目录信息void print_directory(Directory dir) { printf('%s: ', 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. '); return; } int index = find_directory(*fs, name); if (index != -1) { printf('Error: Directory already exists. '); 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. '); return; } Directory dir = &fs->dirs[dir_index]; if (dir->file_count >= MAX_FILE_COUNT) { printf('Error: Maximum file count reached. '); return; } int index = find_file(*dir, name); if (index != -1) { printf('Error: File already exists. '); 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. '); 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. '); return; } Directory dir = &fs->dirs[dir_index]; int index = find_file(*dir, name); if (index == -1) { printf('Error: File not found. '); 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:
'); print_filesystem(fs);
// 删除文件 remove_file(&fs, 'Pictures', 'vacation.jpg'); // 打印删除文件后的文件系统 printf('
Filesystem after removing vacation.jpg: '); print_filesystem(fs);
// 删除目录 remove_directory(&fs, 'Music');
// 打印删除目录后的文件系统 printf('
Filesystem after removing Music directory: '); print_filesystem(fs);
return 0;}
代码解释
结构体定义
File结构体:表示文件,包含文件名name和文件大小size。*Directory结构体:表示目录,包含目录名name,文件数量file_count和文件列表files。*FileSystem结构体:表示整个文件系统,包含目录数量dir_count和目录列表dirs。
函数解释
print_file函数:打印文件信息,包括文件名和大小。*print_directory函数:打印目录信息,包括目录名和目录下的文件信息。*print_filesystem函数:打印整个文件系统的信息,遍历所有目录并打印目录信息。*find_directory函数:根据目录名查找目录,返回目录索引,如果未找到则返回 -1。*find_file函数:根据文件名在指定目录下查找文件,返回文件索引,如果未找到则返回 -1。*add_directory函数:添加新目录到文件系统中。*add_file函数:添加新文件到指定目录下。*remove_directory函数:从文件系统中删除指定目录。*remove_file函数:从指定目录下删除指定文件。
程序运行结果
Initial filesystem:Documents: report.txt (1024 bytes)Pictures: vacation.jpg (2048 bytes)Music: song.mp3 (4096 bytes)
Filesystem after removing vacation.jpg:Documents: report.txt (1024 bytes)Pictures:Music: song.mp3 (4096 bytes)
Filesystem after removing Music directory:Documents: report.txt (1024 bytes)Pictures:
总结
这个简单的程序演示了如何使用C语言模拟文件系统。你可以根据自己的需要扩展这个程序,例如添加更多功能,如文件读写、权限管理等。
原文地址: https://www.cveoy.top/t/topic/f1wr 著作权归作者所有。请勿转载和采集!