C++对于文件的相关操作 创建、读写、删除代码

本文介绍了一种在密码设备上进行文件操作的方法,包括文件的创建、读取、写入及删除等功能,并提供了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建

/**
 * @brief 创建文件:在密码设备内部创建用于存储用户数据的文件
 * @param pucFileName 缓冲区指针,用于存放输入的文件名,最大长度128字节
 * @param uiNameLen   文件名长度
 * @param uiFileSize  文件所占存储空间的长度
 */

void CreateFile(sdf_uint8_t *pucFileName, sdf_uint32_t uiNameLen,
                  sdf_uint32_t uiFileSize) override {
    std::string file_name{reinterpret_cast<const char *>(pucFileName),uiNameLen};
    file_name = mgmt::get_md5_digest(file_name);
    int fd = open(file_name.c_str(),O_RDWR | O_CREAT );
    // TODO: error code, open error
    if (fd == -1){
      ERR_EXIT("open error");
    }
    int ret = lseek(fd,uiFileSize,SEEK_CUR);
    // TODO: error code, leek error
    if (ret == -1){
      ERR_EXIT("leek error");
    }
    close(fd);
  }

读入

/**
 * @brief 读取文件:读取密码设备内部存储的用户数据文件的内容
 * @param pucFileName 缓冲区指针,用于存放输入的文件名,最大长度128字节
 * @param uiNameLen 文件名长度
 * @param uiOffset 指定读取文件时的偏移值
 * @param puiReadLength  入参时指定读取文件内容的长度;出参时返回实际读取文件内容的长度
 * @param pucBuffer 缓冲区指针,用于存放读取的文件数据
 */

void ReadFile(sdf_uint8_t *pucFileName, sdf_uint32_t uiNameLen,
                sdf_uint32_t uiOffset, sdf_uint32_t *puiReadLength,
                sdf_uint8_t *pucBuffer) override {
    std::string file_name = reinterpret_cast<const char *>(pucFileName,uiNameLen);
    std::ifstream file(file_name.c_str(),std::istream::binary);
    file.seekg(uiOffset,std::ios::beg);
    file.read(reinterpret_cast<char *>(pucBuffer),
              reinterpret_cast<long>(puiReadLength));
    if (file)
      std::cout << "all characters read successfully.";
    else{
      std::cout << "error: only " << file.gcount() << " could be read";
      puiReadLength = reinterpret_cast<sdf_uint32_t *>(file.gcount());
    }
    file.close();
    
  }

写入

/**
 * @brief 写入文件:向密码设备内部存储用户数据的文件中写入内容
 * @param pucFileName 缓冲区指针,用于存放输入的文件名,最大长度128字节
 * @param uiNameLen 文件名长度
 * @param uiOffset 指定写入文件时的偏移值
 * @param uiWriteLength 指定写入文件内容的长度
 * @param pucBuffer 缓冲区指针,用于存放输入的写文件数据
 */

void WriteFile(sdf_uint8_t *pucFileName, sdf_uint32_t uiNameLen,
                 sdf_uint32_t uiOffset, sdf_uint32_t uiWriteLength,
                 sdf_uint8_t *pucBuffer) override {
    std::string file_name = reinterpret_cast<const char *>(pucFileName,uiNameLen);
    std::ofstream file(file_name.c_str(),std::istream::binary);
    file.seekp(uiOffset,std::ios::beg);
    file.write(reinterpret_cast<const char *>(pucBuffer),uiWriteLength);
    file.close();
  }

删除

/**
 * @brief 删除文件:删除指定文件名的密码设备内部存储用户数据的文件
 * @param pucFileName 缓冲区指针,用于存放输入的文件名,最大长度128字节
 * @param uiNameLen 文件名长度
 */

void DeleteFile(sdf_uint8_t *pucFileName, sdf_uint32_t uiNameLen) override {
    std::string file_name{reinterpret_cast<const char *>(pucFileName),uiNameLen};
    file_name = mgmt::get_md5_digest(file_name);
    remove(file_name.c_str());
  }

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值