当前位置: 首页> 教育> 大学 > 【lesson9】客户端文件操作类设计

【lesson9】客户端文件操作类设计

时间:2025/7/15 8:58:55来源:https://blog.csdn.net/m0_67077469/article/details/139610026 浏览次数:1次

文章目录

  • 文件操作类介绍
  • 成员变量
  • 成员函数

文件操作类介绍

这个其实与服务端的文件实用工具类雷同,只是功能需求并没有服务端那么多

成员变量

private:std::string _filename;//文件名

成员函数

之前的服务端已近把这些接口介绍的非常清楚了,这里就不过多介绍了,直接放代码.
注意:在Windows里

#include <experimental/filesystem>

这个头文件可能不能使用,我们得换成

#include <filesystem>

原先的

namespace fs = std::experimental::filesystem;

也替换成

namespace fs = std::filesystem;

fileUtil(std::string filename):_filename(filename)
{}bool Remove()
{if (exists() == false){return true;}remove(_filename.c_str());return true;
}size_t fileSize()
{struct stat st;int ret = stat(_filename.c_str(), &st);if (ret == -1){std::cout << strerror(errno) << std::endl;return 0;}return st.st_size;
}time_t lastModifyTime()
{struct stat st;int ret = stat(_filename.c_str(), &st);if (ret == -1){std::cout << strerror(errno) << std::endl;return -1;}return st.st_mtime;
}time_t lastAccessTime()
{struct stat st;int ret = stat(_filename.c_str(), &st);if (ret == -1){std::cout << strerror(errno) << std::endl;return -1;}return st.st_atime;
}std::string fileName()
{size_t pos = _filename.find_last_of("/");if (pos == std::string::npos){return _filename;}return _filename.substr(pos + 1);
}bool setContent(const std::string& body)
{std::ofstream ofs;ofs.open(_filename, std::ios::binary);if (ofs.is_open() == false){std::cout << "setContent open failed\n";return false;}ofs.write(&body[0], body.size());if (ofs.good() == false){std::cout << "setContent write failed\n";ofs.close();return false;}ofs.close();return true;
}bool getPosLen(std::string* body, size_t pos, size_t len)
{std::ifstream ifs;if (pos + len > fileSize()){std::cout << "getPosLen failed\n";return false;}ifs.open(_filename, std::ios::binary);if (ifs.is_open() == false){std::cout << "getPosLen open failed\n";return false;}body->resize(len - pos);ifs.read(&(*body)[0], len);if (ifs.good() == false){std::cout << "getPosLen read failed\n";ifs.close();return false;}ifs.close();return true;
}bool getContent(std::string* body)
{size_t n = fileSize();return getPosLen(body, 0, n);
}bool exists()
{return fs::exists(_filename);
}
bool createDirectory()
{if (exists())return true;return fs::create_directories(_filename);
}
bool getDirectory(std::vector<std::string>* arry)
{for (const fs::directory_entry& entry : fs::directory_iterator{ _filename }){if (fs::is_directory(entry))continue;arry->push_back(fs::path(entry).relative_path().string());}return true;
}
关键字:【lesson9】客户端文件操作类设计

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: