前言
今天和大家分享一个用C++实现的简单文件目录管理系统。这个项目虽小,但涵盖了链表操作、文件管理的基本概念,非常适合用来学习和练习C++编程。
项目介绍
这是一个基于内存的单级文件目录管理系统,支持文件的创建、删除和目录显示等基本功能。系统使用链表结构存储文件信息,每个文件节点包含文件名和大小信息。
核心代码实现
1. 文件节点结构
// 文件节点结构体
struct Filenode {
char filename[10]; // 文件名
int length; // 文件大小
Filenode *next; // 指向下一个文件节点的指针
}filehead = {"root", 1024, NULL}; // 初始化文件头节点
2. 主要功能实现
// 创建新文件
void createFile() {
Filenode* newFile = new Filenode; // 创建新文件节点
cout << "请输入文件名(最大长度9):";
cin >> newFile->filename;
cout << "请输入文件大小:";
cin >> newFile->length;
// 将新文件添加到链表末尾
newFile->next = NULL;
Filenode* current = &filehead; // 从文件头开始遍历
while (current->next != NULL) {
current = current->next;
}
current->next = newFile; // 将新文件添加到链表末尾
cout << "文件创建成功!" << endl;
}
// 删除文件
void deleteFile() {
char delete_filename[10]; // 存储要删除的文件名
std::cout << "请输入要删除的文件名:";
std::cin >> delete_filename;
Filenode* current = &filehead; // 从文件头开始遍历
Filenode* prev = NULL; // 记录前一个节点
while (current != NULL) {
// 找到要删除的文件
if (strcmp(current->filename, delete_filename) == 0
&& current != &filehead) {
if (prev != NULL) {
prev->next = current->next;
}
delete current; // 删除当前节点
cout << "文件删除成功!" << endl;
return;
}
prev = current;
current = current->next;
}
cout << "文件不存在!" << endl;
}
// 打印文件目录
void printDirectory() {
Filenode* current = &filehead;
cout << "\n当前目录内容:" << endl;
cout << "文件名\t\t大小(bytes)" << endl;
cout << "--------------------------------" << endl;
while (current != NULL) {
cout << current->filename << "\t\t" << current->length << endl;
current = current->next;
}
cout << "--------------------------------" << endl;
}
3.主函数
#include <iostream>
#include <cstring>
#include <malloc.h>
#include <limits>
using namespace std;
int main() {
int choice; // 用户选择的操作
while (true) {
cout << "\n--------------------------------" << endl;
cout << "文件管理系统" << endl;
cout << "1:创建文件" << endl;
cout << "2:删除文件" << endl;
cout << "3:打印文件目录" << endl;
cout << "4:退出" << endl;
cout << "请选择操作(1-4):";
// 检查输入是否成功
if (!(cin >> choice)) {
// 清除错误状态
cin.clear();
// 清除输入缓冲区
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "请输入有效的数字!" << endl;
continue;
}
cout << "\n--------------------------------" << endl;
switch (choice) {
case 1: createFile(); break; // 创建文件
case 2: deleteFile(); break; // 删除文件
case 3: printDirectory(); break; // 打印文件目录
case 4: return 0; // 退出程序
default: cout << "无效选择,请重新选择!" << endl; // 输出错误信息
}
}
}
技术要点
1. 链表操作:使用单向链表实现文件的组织管理
- 内存管理:通过new和delete进行动态内存分配
- 输入处理:使用cin.clear()和cin.ignore()处理输入异常
- 用户交互:实现了简单但实用的命令行界面
踩坑记录
在开发过程中遇到了一个典型的输入问题:当用户输入非法字符时,程序会陷入死循环。解决方案是:
if (!(cin >> choice)) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "请输入有效的数字!" << endl;
continue;
}
项目收获
通过这个项目,我不仅巩固了C++的基础知识,还学习了文件系统的基本原理。特别是在处理链表操作和输入异常时,加深了对指针操作和输入流处理的理解。虽然这只是一个简单的实现,但它为理解更复杂的文件系统打下了良好的基础。
改进方向
- 添加文件查找功能
- 实现文件内容的读写
- 支持多级目录结构
- 添加文件权限管理
结语
这个项目虽然简单,但包含了很多基础且重要的编程概念。希望这篇文章能对正在学习C++的同学有所帮助。如果你有任何问题或建议,欢迎在评论区留言交流!
---
如果对你有帮助,别忘了点个赞哦!