网上常见人这样封装代码,这种代码缺点就是要手工处理new处理的内存空间。
//读取一个文件的内容到缓冲区,下面的代码仅是例子,不写错误处理。 int LoadToBuffer(const char* filename, byte* buffer) { ifstream ifs(filename); int filesize = static_cast<int>(boost::filesystem::file_size(filename)); buffer = new byte[filesize]; ifs.read(buffer,filesize); ifs.close(); return 0; }
处理的办法,有下面几种。
1.用智能指针代替。
2.用vector<char>代替。
#include <iostream> #include <string> #include <vector> #include <fstream> #include <boost/filesystem.hpp> #include <locale> using namespace std; int LoadToBuffer(const char* filename, vector<char>& cv) { ifstream ifs(filename); int filesize = static_cast<int>(boost::filesystem::file_size(filename)); cv.resize(filesize); ifs.read(&cv[0], filesize); ifs.close(); return 0; } int main() { std::wcout.imbue(locale("chs")); //wcout 显示中文 vector<char> cv; LoadToBuffer("main.cpp", cv); wcout << (wchar_t*)&cv[2] << endl;//因为是UNICODE格式的文件,去掉前面的FFFE标准 }