801138631e
还存在一点点bug,不难fix 2. 增加了中文字库,支持中文显示 3. 修复和优化了一些地方
189 lines
5.7 KiB
C++
189 lines
5.7 KiB
C++
//
|
|
// Created by misaki on 2025/9/9.
|
|
//
|
|
/**
|
|
* 本模块用于管理SD卡文件
|
|
* 同样为单例类
|
|
* 支持异步读取和写入
|
|
*/
|
|
#pragma once
|
|
|
|
#include <mutex>
|
|
#include <functional>
|
|
#include <vector>
|
|
#include <string>
|
|
#include "ThreadManager.h"
|
|
#include "SD_MMC.h"
|
|
|
|
class SDFileManager {
|
|
public:
|
|
// 文件操作回调函数类型定义
|
|
using WriteCallback = std::function<void(bool success, const char* path)>;
|
|
using ReadCallback = std::function<void(bool success, const char* path, const std::string& content)>;
|
|
using ListCallback = std::function<void(bool success, const std::vector<std::string>& files)>;
|
|
using OpenCallback = std::function<void(bool success, FILE* file)>;
|
|
|
|
static SDFileManager* getInstance();
|
|
|
|
// try to init sdcard 对外提供的自动初始化,如果已经初始化了,只会打印一个日志,如果没有初始化,会自动初始化,这得益于单例模式的特性
|
|
// 与一般的初始化函数不同的是,该函数可以被重复调用,不会重复初始化sd卡
|
|
void tryInitSDCard();
|
|
|
|
// 同步文件操作
|
|
/**
|
|
* 同步写入文件
|
|
* @param path 文件路径
|
|
* @param data 数据
|
|
* @return 是否成功
|
|
*/
|
|
bool writeFileSync(const char* path, const char* data);
|
|
/**
|
|
* 同步读取文件
|
|
* @param path 文件路径
|
|
* @return 文件内容
|
|
*/
|
|
std::string readFileSync(const char* path);
|
|
|
|
/**
|
|
* 同步读取文件(std::string)
|
|
* @param path 文件路径
|
|
* @return 文件内容
|
|
*/
|
|
std::string readFileSync(const std::string& path);
|
|
|
|
/**
|
|
* 同步列出目录下的文件
|
|
* @param directory 目录路径
|
|
* @param extension 文件扩展名
|
|
* @return 文件列表
|
|
*/
|
|
std::vector<std::string> listFilesSync(const char* directory, const char* extension = nullptr);
|
|
|
|
/**
|
|
* 同步打开文件
|
|
* @param path 文件路径
|
|
* @param mode 模式
|
|
* @return 文件指针
|
|
*/
|
|
FILE* openFileSync(const char* path, const char* mode = "rb");
|
|
|
|
/**
|
|
* 同步关闭文件
|
|
* @param file 文件指针
|
|
* @return 是否成功
|
|
*/
|
|
bool closeFileSync(FILE* file);
|
|
|
|
// 异步文件操作
|
|
/**
|
|
* 异步写入文件
|
|
* @param path 文件路径
|
|
* @param data 数据
|
|
* @param callback 回调函数
|
|
*/
|
|
void asyncWriteFile(const char* path, const char* data, WriteCallback callback = nullptr);
|
|
/**
|
|
* 异步读取文件
|
|
* @param path 文件路径
|
|
* @param callback 回调函数
|
|
*/
|
|
void asyncReadFile(const char* path, ReadCallback callback = nullptr);
|
|
/**
|
|
* 异步列出目录下的文件
|
|
* @param directory 目录路径
|
|
* @param extension 文件扩展名
|
|
* @param callback 回调函数
|
|
*/
|
|
void asyncListFiles(const char* directory, const char* extension, ListCallback callback = nullptr);
|
|
/**
|
|
* 异步打开文件
|
|
* @param path 文件路径
|
|
* @param mode 模式
|
|
* @param callback 回调函数
|
|
*/
|
|
void asyncOpenFile(const char* path, const char* mode, OpenCallback callback = nullptr);
|
|
|
|
/**
|
|
* 类似Linux的ls命令,列出目录内容
|
|
* @param path 目录路径
|
|
* @param recursive 是否递归列出子目录
|
|
* @param showDetails 是否显示详细信息(大小、类型等)
|
|
* @return 格式化后的目录列表字符串
|
|
*/
|
|
std::string lsCommand(const char* path, bool recursive = false, bool showDetails = false);
|
|
|
|
/**
|
|
* 类似Linux的cat命令,显示文件内容
|
|
* @param path 文件路径
|
|
* @param lineNumbers 是否显示行号
|
|
* @return 文件内容字符串
|
|
*/
|
|
std::string catCommand(const char* path, bool lineNumbers = false);
|
|
|
|
/**
|
|
* 类似Linux的pwd命令,获取当前工作目录
|
|
* @return 当前工作目录
|
|
*/
|
|
std::string pwdCommand();
|
|
|
|
/**
|
|
* 类似Linux的cd命令,改变当前工作目录
|
|
* @param path 目标目录路径
|
|
* @return 是否成功
|
|
*/
|
|
bool cdCommand(const char* path);
|
|
|
|
/**
|
|
* 类似Linux的mkdir命令,创建目录
|
|
* @param path 目录路径
|
|
* @return 是否成功
|
|
*/
|
|
bool mkdirCommand(const char* path);
|
|
|
|
/**
|
|
* 类似Linux的rm命令,删除文件或目录
|
|
* @param path 文件或目录路径
|
|
* @param recursive 是否递归删除目录
|
|
* @return 是否成功
|
|
*/
|
|
bool rmCommand(const char* path, bool recursive = false);
|
|
|
|
/**
|
|
* 类似Linux的stat命令,获取文件/目录信息
|
|
* @param path 文件或目录路径
|
|
* @return 文件信息字符串
|
|
*/
|
|
std::string statCommand(const char* path);
|
|
|
|
// 获取SD卡和Flash信息
|
|
uint32_t getSDCardSize() const { return SDCard_Size; }
|
|
uint32_t getFlashSize() const { return Flash_Size; }
|
|
|
|
private:
|
|
explicit SDFileManager(); // 私有构造函数,确保单例
|
|
~SDFileManager();
|
|
|
|
SDFileManager(SDFileManager const&) = delete; // 禁止拷贝构造
|
|
SDFileManager& operator=(SDFileManager const&) = delete; // 禁止赋值构造
|
|
|
|
// 初始化SD卡
|
|
void init();
|
|
|
|
|
|
// 辅助方法
|
|
std::string getFileInfoString(const char* path, const struct stat* st);
|
|
std::string getFileTypeString(mode_t mode);
|
|
std::string formatFileSize(size_t size);
|
|
bool removeDirectoryRecursive(const char* path);
|
|
|
|
// 线程配置
|
|
ThreadConfig getThreadConfig(const char* operation);
|
|
|
|
private:
|
|
static SDFileManager* SDFileInstance; // 单例实例
|
|
static std::mutex instance_mutex; // 实例互斥锁
|
|
std::mutex file_operation_mutex; // 文件操作互斥锁
|
|
bool is_initialized; // SD卡初始化状态
|
|
|
|
std::string current_directory; // 当前工作目录
|
|
}; |