C++文件I/O

C++文件I/O

C++有三种类型的文件流:

  • 输入文件流(声明ifstream对象)
  • 输出文件流(声明ofstream对象)
  • 输入和输出流(声明fstream对象)

    注意:输入流是从文件读入数据到内存,输出流是将内存的数据写入到文件中

    • 在建立了流后使用open()函数将流与文件关联,如:
      ofstream ofile; //创建输出文件流
      ofile.open(“a.txt”); //打开文件,流与文件关联
      ofile.close(); //关闭文件

      1. 在打开文件时,若使用绝对路径,路径中的‘\’要转义为‘\\’,如“e:\\desktop\\a.txt”。
      2. 也可以在创建对象时关联文件:ofstream ofile(“a.txt”)。
      3. 事实上open()函数原型的参数为:(const char* filemane, int openmode);其中,openmode在打开输出文件时,默认为ios::out;打开输入文件时,默认为ios::in。
      4. 可以通过ofile.is_open()判断文件是否打开成功(成功返回1,失败返回0)。
      5. 如果没有主动用close关闭文件,在流对象退出作用于时,(通过调用析构函数)也会自动关闭相关联的文件;但是能尽早主动释放资源更好的。
      6. 在ofile调用了close()函数后,也能再调用open()与其他文件(如b.txt)关联。




~~作业3~~

  • ## 用eof判断文件尾 ##
    首先创一个写入年份的文件:

接下来是要求的文件:

int i;

ofstream f_result;  
ifstream f_years;

f_years.open("years.txt");
f_years >> i;

while(f_years.good()){
    if(isLeapYear(i))
        f_result << i << "is a leap year.\n"; 
    else
        f_result << i << "is not a leap year.\n"; 

    f_years >> i;
    }

if(f_years.eof())
    cout << "End of file reached.\n";
else if(f_years.fail())
    cout << "Terminated by mismatch.\n";

f_result.close();
f_years.close();
  • 用feof

    int i;
    
    ofstream f_result;      
    FILE *fp = fopen("years.txt","r");
    
    f_result.open("result of years.txt");
    fscanf(fp, "%d",&i);
    
    while(!feof(fp)){               
        if(isLeapYear(i))
            f_result << i << "is a leap year.\n"; 
        else
            f_result << i << "is not a leap year.\n"; 
    
        fscanf(fp, "%d",&i);
    }
    
    fclose(fp);         
    f_result.close();
    
阅读更多

没有更多推荐了,返回首页