C++实现简单文件目录管理系统

前言

今天和大家分享一个用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++的同学有所帮助。如果你有任何问题或建议,欢迎在评论区留言交流!

---

如果对你有帮助,别忘了点个赞哦!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值