<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;

}

<C++>FILE和fstream

时间: 2024-10-08 11:13:06

<C++>FILE和fstream的相关文章

C/C++文件输入输出操作——FILE*、fstream、windowsAPI

http://hi.baidu.com/andywangcn/item/cb3e9785d6c124caee083ddb 基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在头文件stdio.h中定义如下: typedef struct {int level; /* fill/empty level of buffer */unsigned flags; /* Fi

(C/C++) FILE 讀寫檔案操作

在C/C++ 讀寫檔案操作比較常見應該是利用 FILE.ifstream.ofstream 在這篇筆記裡頭記錄 FILE.fstream 使用方法及操作 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <fstream> 5 6 using namespace std; 7 8 9 int main() 10 { 11 /* 12 r : open for

c用libcurl库实现https下get/post网络通信

一.LibCurl基本编程框架 libcurl是一个跨平台的网络协议库,支持http, https,ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持HTTPS证书授权,HTTP POST,HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证.在基于LibCurl的程序里,主要采用callbackfunction (回调函数)的形式完成传输任务,用户在启动传输前设置好各类参数和回调函数,当满足条件时li

1.C与c++文件IO

一. C与c++文件IO 1.1文件类型:ASCII文件和二进制文件 首先我不保证文件类型只有这两种.但理解这两种文件对学习文件IO操作非常重要. 1.1.1ASCII文件 ASCII文件也就是文本文件,每个字节存放一个ASCII代码,代表一个字符.可以使用任何编辑器打开,如记事本或者UE等,打开就是你能看懂的字符.比如姓名"richard"就会存储为7个字节,每个字节分别为对应字母的ASCII码.整数10000就会被存为"10000",每个字节为每个字母的ASCI

fopen()函数中参数mode的取值

FILE * fopen(const char * path,const char * mode); 参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. rb+ 读写打开一个二进制文件,只允许读写数据. rt+ 读写打开一个文本文件,允许读和写. w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件. w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会

TCP文件发送

发送端(客户端) 1 #include <iostream> 2 #include <winsock2.h> 3 #include <Ws2tcpip.h> 4 #include <fstream> 5 using namespace std; 6 7 #pragma comment(lib, "ws2_32.lib") 8 9 struct FileHeader 10 { 11 12 char m_szFileName[MAX_PATH

二.fstream的使用方法

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1.插入器(<<) 向流输出数据.比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<' ';就表示把字符串"Write Stdout"和换行字符(' ')输出到标准输出流. 2.析取器(>>) 从流中输入数

c++文件输入输出流fstream,对输入&gt;&gt;和输出&lt;&lt;重载

1. fstream 继承自iostream --> 要包含头文件#include<fstream> 2. 建立文件流对象 3. 打开文件夹 4. 测试是否打开成功 5. 进行读写操作 6. 关闭文件 #include<iostream> #include<fstream> using namespace std; int main(){ ifstream ifile; ofstream ofile; ifile.open("d:\\fileIn.txt

fstream 中判断是否成功打开文件

from: http://blog.csdn.NET/zhtsuc/article/details/2938614 关于C++ fstream的一个容易使用出错的地方 关于c++ 中 文件流的两个类,ifstream 和ofstream,大家也许并不陌生. 其负责c++的文件输入流 和 文件输出流.基本上所以语言都会提供类似的文件输入流 和文件输出流类. 但当大家学习了Java,或者c#后,大家就很容易用错这个类,把三种语言混淆. 在java 和 c#中,关于打开输入文件流,或者输出流,都是通过