FileOperate.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #include "stdafx.h"
  2. #include "FileOperate.h"
  3. #include <filesystem>
  4. #include <stdio.h>
  5. FileOperate::FileOperate()
  6. {}
  7. FileOperate::FileOperate(const std::string &file) : mFile(file)
  8. {}
  9. FileOperate::~FileOperate()
  10. {
  11. if (mFileStream.is_open()) {
  12. close();
  13. }
  14. }
  15. /*
  16. * 创建文件
  17. */
  18. bool FileOperate::create(const std::string &file)
  19. {
  20. std::fstream out_file;
  21. out_file.open(file.c_str(), std::ios::out);
  22. if (!out_file) {
  23. return false;
  24. }
  25. out_file.close();
  26. return true;
  27. }
  28. /*
  29. * 删除文件
  30. */
  31. bool FileOperate::remove(const std::string &file)
  32. {
  33. // 删除文件,成功返回0,否则返回-1
  34. if (-1 == std::remove(file.c_str())) {
  35. return false;
  36. }
  37. return true;
  38. }
  39. bool FileOperate::exist(const string &file)
  40. {
  41. if (std::filesystem::exists(file))
  42. return true;
  43. return false;
  44. }
  45. bool FileOperate::open(ios_base::openmode __mode)
  46. {
  47. mFileStream.open(mFile.c_str(), __mode);
  48. return mFileStream.is_open();
  49. }
  50. bool FileOperate::open(const string &file, ios_base::openmode __mode)
  51. {
  52. mFile = file;
  53. return open(__mode);
  54. }
  55. void FileOperate::close()
  56. {
  57. mFileStream.close();
  58. mFileStream.clear();
  59. }
  60. /*
  61. * 文件重命名
  62. */
  63. bool FileOperate::rename(const std::string &newName)
  64. {
  65. std::string newFile = fileDir() + newName;
  66. int result = std::rename(mFile.c_str(), newFile.c_str());
  67. if (result == 0)
  68. return true;
  69. return false;
  70. }
  71. /*
  72. * 判断文件是否存在
  73. */
  74. bool FileOperate::isExist()
  75. {
  76. return FileOperate::exist(mFile);
  77. }
  78. /*
  79. * 获取文件名
  80. * 文件绝对路径: /home/root/.../Test/test1.txt
  81. * 返回值 : test1.txt
  82. */
  83. const string FileOperate::fileName()
  84. {
  85. string name = mFile;
  86. std::size_t pos = mFile.rfind('/');
  87. if (pos != std::string::npos) {
  88. name = mFile.substr(pos + 1);
  89. }
  90. return name;
  91. }
  92. /*
  93. * 获取文件所在目录
  94. * 文件绝对路径: /home/root/.../Test/test1.txt
  95. * 返回值 : /home/root/.../Test/
  96. */
  97. const string FileOperate::fileDir()
  98. {
  99. string dir = "";
  100. std::size_t pos = mFile.rfind('/');
  101. if (pos != std::string::npos) {
  102. dir = mFile.substr(0, pos + 1);
  103. }
  104. return dir;
  105. }
  106. /*
  107. * 获取文件大小(总字节数)
  108. */
  109. size_t FileOperate::fileSize()
  110. {
  111. #if 0
  112. // 方式一
  113. mFileStream.seekg(0, mFileStream.end);
  114. int length = mFileStream.tellg();
  115. mFileStream.seekg(0, mFileStream.beg);
  116. return length;
  117. #endif
  118. // 方式二
  119. struct stat info;
  120. stat(mFile.c_str(), &info);
  121. return static_cast<std::size_t>(info.st_size);
  122. }
  123. bool FileOperate::atEnd()
  124. {
  125. // peek函数的作用是获取下一个字符,但是指针不会移动
  126. return mFileStream.peek() == EOF;
  127. }
  128. void FileOperate::read(string &buffer, size_t bufferSize)
  129. {
  130. buffer.resize(bufferSize);
  131. mFileStream.read(&buffer[0], bufferSize);
  132. }
  133. const string FileOperate::readLine()
  134. {
  135. // 文件存在 读取数据
  136. std::string dataStr = "";
  137. getline(mFileStream, dataStr);
  138. return dataStr;
  139. }
  140. const string FileOperate::readAll()
  141. {
  142. std::string buffer;
  143. size_t length = fileSize();
  144. FileOperate::read(buffer, length);
  145. return buffer;
  146. }
  147. void FileOperate::write(const string &data)
  148. {
  149. mFileStream << data << '\n';
  150. }