1:getline方式
2:seekg->read 方式
3:循環read方式
//循環read方式時如果在還未讀入 MAX_FILE_LEN 個字符時就到了文件尾,可以用成員函數 int gcount();來取得實際讀取的字符數;
const int MAX_FILE_LEN = 1024;
char rootdir[MAX_FILE_LEN] ={0};
::GetCurrentDirectoryA(MAX_PATH,rootdir);
strcat(rootdir,("\\文字.txt"));
string mail_body = "";
string mail_bodyT = "";
string mail_bodyF = "";
ifstream ifs(rootdir, ios::in | ios::binary);
if ( ifs.is_open() )
{
//getline方式
string strLine = "";
while(std::getline(ifs,strLine))
{
mail_body += strLine;
}
//seekg->read 方式
ifs.seekg(0, ios::end);
int length = ifs.tellg();
ifs.seekg(0, ios::beg);
char * buffer = new char [length];
ifs.read (buffer,length);
mail_bodyT = buffer;
//循環read方式
int iLen = 0;
char fileBuff[MAX_FILE_LEN];
memset(fileBuff, 0, MAX_FILE_LEN*sizeof(char));
while (ifs.read(fileBuff, MAX_FILE_LEN)) //判斷的讀取後ifs.good()
{
mail_bodyF += fileBuff;
iLen += ifs.gcount();
memset(fileBuff, 0, MAX_FILE_LEN*sizeof(char));
}
mail_bodyF += fileBuff; //剩餘的ifs.gcount()個字符
iLen += ifs.gcount(); //這裏的iLen應該跟前面的length是等值的
ifs.close();
}
補充:seekg() 和tellg()的函數用法
seekg()函數
istream& seekg(streampos pos);
istream& seekg(streamoff off, ios_base::seekdir way);
/*
用法1設置輸入流指針相對於開始的絕對位置
其實就相當於 seekg(streampos pos, ios::beg);
pos是一個非負整數。
用法2設置輸入流指針相對於基地址的位置, 基地址可以是[ios::beg,ios::end,ios::cur]
參數off是偏移值,參數way是基地址的類型。
其中offs是有符號整型
*/
tellg()函數
streampos tellg();
//返回當前定位指針的位置。上面的示例中它先定位到了ios::end文件結束處,所以返回也就是文件的大小。