首页 > 代码库 > <C++>FILE和fstream

<C++>FILE和fstream

曾在工作中遇见一个特别问题,就是在使用fstream中getline方法读数据读不出。如下:

 1 #include <iostream> 2 #include <fstream> 3 #include <string> 4 #include <vector> 5  6 using namespace std; 7  8 int _tmain(int argc, _TCHAR* argv[]) 9 {10   vector<string> vstr;11 12   fstream file1("d:\\test1.txt");13 14   fstream file2("d:\\test2.txt");15 16   fstream file3("d:\\test3.txt");17 18   while(!file1.eof())19   {20     char buf[MAX_PATH];21 22     file1.getline(buf,sizeof(buf));23 24     string getStr = string((const char*)buf);25 26     if(string::npos != getStr.find(?,0))27     {28 29       string str = getStr.substr(0,getStr.find(\t,0));30 31       vstr.push_back(str);     32 33   }  34 35   while(!file2.eof())36   {37     char buf[MAX_PATH];38 39     file2.getline(buf1,sizeof(buf1));40 41     string getStr1 = string((const char*)buf1);42 43     for(int i=0; i < vstr.size();i++)44     {45       if(string::npos != getStr1.find(vstr[i],0))46       {47 48         file3<<getStr1<<endl;49 50         break;51       }52 53   }  54 55   file1.close();56 57   file2.close();58 59   file3.close();60 61   return 0;62 }

后来,灵机一想改用File中fgets来读就行。如下

#include <stdio.h>#include <fstream>#include <string>#include <vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){  vector<string> vstr;      FILE *pFile1,*pFile2,*pFile3;  pFile1 = fopen("d:\\file1.txt");  pFile1 = fopen("d:\\file2.txt");  pFile1 = fopen("d:\\file3.txt");     if(NULL ==pFile1 || NULL ==pFile2 || NULL == PFile3)     {                exit();      }  while(!feof(pFile1)  {    char buf[MAX_PATH];    if ((NULL==fgets(buf,sizeof(buf),pFile1))?TRUE:FALSE)                                    return;    string getStr = string((const char*)buf);    if(string::npos != getStr.find(?,0))    {      string str = getStr.substr(0,getStr.find(\t,0));      vstr.push_back(str);     }    }    while(!feof(pFile2))  {    char buf[MAX_PATH];     if ((NULL==fgets(buf,sizeof(buf),pFile2)?TRUE:FALSE)                                    return;    string getStr1 = string((const char*)buf1);    for(int i=0; i < vstr.size();i++)    {      if(string::npos != getStr1.find(vstr[i],0))      {        fputs(getStr1,pFile3);        break;      }                }  }    fclose(pFile1);  fclose(pFile2);  fclose(pFile3);  return 0;}