我想问一下将文件转换为流文件的最简单快捷的方法。
我做了以下事情:
//convert to stream:
std::string fil= "/home/file.pdf";
std::ifstream t(fil.c_str());
if (t)
{
string res;
string line;
while (getline(t, line, '\n'))
{
res=res+line;
}
std::string p;
p=(base64_encode((reinterpret_cast<const unsigned char *> (res.c_str())),res.size()));
std::string data=p;
char *token = strtok( const_cast<char*>(fil.c_str() ), "/" );
std::string name;
std::vector<int> values;
while ( token != NULL )
{
name=token;
token = strtok( NULL, "/" );
}
std::string f_name=name;
}
//convert from stream to file
ofstream myfile;
std::string fil;
ofstream file (fil.c_str(), ios::out | ios::binary);
std::string content = base64_decode(f_data);
file.write ((char*)&content, sizeof(content));
file.close();
这是最简单的方法吗?!是否可以升级我的代码?
修改
代码适用于.cpp或.txt文件。它不适用于.pdf文件。为什么呢?
答案 0 :(得分:0)
据我所知,仅使用C ++ 03标准库工具将文件读入字符串(字节为字节)的最简单方法是:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
std::string readfile ( const std::string& path )
{
std::ostringstream contents;
std::ifstream file(path.c_str(), std::ios::binary);
contents << file.rdbuf();
return (contents.str());
}
然后,您可以进行任何您想要应用的处理:
std::cout << readfile("foo.txt") << std::endl;
如果你想应用base 64编码,我会从你的代码中假设以下签名,并且方便的重载:
std::string base64_encode( const unsigned char * data, std::size_t size );
std::string base64_encode ( const std::string& contents )
{
const unsigned char * data =
reinterpret_cast<const unsigned char*>(contents.data());
return (base64_encode(data, contents.size()));
}
你可以这样调用:
// Read "foo.txt" file contents, then base 64 encode the binary data.
const std::string data = base64_encode(readfile("foo.txt"));