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) {
print_directory(fs.dirs[0]);
}
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 = 1;
// Create root directory
Directory root;
strcpy(root.name, '/');
root.file_count = 0;
fs.dirs[0] = root;
// Main loop
while (1) {
char command[100];
printf('> ');
scanf('%s', command);
if (strcmp(command, 'ls') == 0) {
print_directory(fs.dirs[0]);
} else if (strcmp(command, 'cd') == 0) {
char dir_name[MAX_FILENAME_LENGTH];
scanf('%s', dir_name);
int dir_index = find_directory(fs, dir_name);
if (dir_index == -1) {
printf('Error: Directory not found.\n');
} else {
print_directory(fs.dirs[dir_index]);
}
} else if (strcmp(command, 'mkdir') == 0) {
char dir_name[MAX_FILENAME_LENGTH];
scanf('%s', dir_name);
add_directory(&fs, dir_name);
} else if (strcmp(command, 'touch') == 0) {
char file_name[MAX_FILENAME_LENGTH];
int file_size;
scanf('%s %d', file_name, &file_size);
add_file(&fs, '/', file_name, file_size);
} else if (strcmp(command, 'rm') == 0) {
char file_name[MAX_FILENAME_LENGTH];
scanf('%s', file_name);
remove_file(&fs, '/', file_name);
} else if (strcmp(command, 'rmdir') == 0) {
char dir_name[MAX_FILENAME_LENGTH];
scanf('%s', dir_name);
remove_directory(&fs, dir_name);
} else if (strcmp(command, 'exit') == 0) {
break;
} else {
printf('Error: Invalid command.\n');
}
}
return 0;
}
代码说明
该代码实现了一个简单的命令行文件管理器,支持以下命令:
ls:列出当前目录下的所有文件和子目录。cd <dir>:进入指定的子目录。mkdir <dir>:创建一个新的子目录。touch <file> <size>:在当前目录下创建一个指定大小的新文件。rm <file>:删除当前目录下的指定文件。rmdir <dir>:删除当前目录下的指定子目录及其所有文件。exit:退出文件管理器。
代码中使用了三个结构体来表示文件系统:
File:表示一个文件,包含文件名和文件大小。Directory:表示一个目录,包含目录名、文件数量和文件列表。FileSystem:表示整个文件系统,包含目录数量和目录列表。
代码中定义了若干函数来实现文件管理器的功能,例如:
print_file:打印文件信息。print_directory:打印目录信息。print_filesystem:打印文件系统信息。find_directory:查找指定名称的目录。find_file:查找指定名称的文件。add_directory:添加新目录。add_file:添加新文件。remove_directory:删除目录。remove_file:删除文件。
在main函数中,首先创建了一个根目录,然后进入循环,不断读取用户输入的命令并执行相应的操作。
原文地址: https://www.cveoy.top/t/topic/f1wj 著作权归作者所有。请勿转载和采集!