精华内容
下载资源
问答
  • c++文件的读取和写入

    万次阅读 多人点赞 2018-09-30 15:59:39
    C++中,有一个stream这个类,所有I/O都以这个“流”类为基础,包括我们要认识的文件I/O. stream这个类有两个重要运算符: 1、插入器(<<)  向流输出数据。比如说系统有一个默认标准输出...

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间

    在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O.
    
    
    
    stream这个类有两个重要的运算符:
    

    1、插入器(<<)
      向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<“Write Stdout”<<’\n’;就表示把字符串"Write Stdout"和换行字符(’\n’)输出到标准输出流。
      2、析取器(>>)
      从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型的数据。
      在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。

    常见的文件操作:
    

    一、打开文件
      在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
      void open(const char* filename,int mode,int access);

    参数:
      filename:  要打开的文件名
      mode:    要打开文件的方式
      access:   打开文件的属性
      打开文件的方式在类ios(是所有流式I/O类的基类)中定义.

    常用的值如下:
      ios::app:   以追加的方式打开文件
      ios::ate:   文件打开后定位到文件尾,ios:app就包含有此属性
      ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
      ios::in:    文件以输入方式打开(文件数据输入到内存)
      ios::out:   文件以输出方式打开(内存数据输出到文件)
      ios::nocreate: 不建立文件,所以文件不存在时打开失败
      ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
      ios::trunc:  如果文件存在,把文件长度设为0

    可以用“或”把以上属性连接起来,如ios::out|ios::binary
      打开文件的属性取值是:
      0:普通文件,打开访问
      1:只读文件
      2:隐含文件
      4:系统文件
      可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。
      例如:以二进制输入方式打开文件c:\config.sys
      fstream file1;
      file1.open(“c:\config.sys”,ios::binary|ios::in,0);
      如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:
      file1.open(“c:\config.sys”); <=> file1.open(“c:\config.sys”,ios::in|ios::out,0);
      另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:
      fstream file1(“c:\config.sys”);

    特别提出的是,fstream有两个子类:
    

    ifstream(input file stream)和ofstream(outpu file stream),

    ifstream默认以输入方式打开文件

    ofstream默认以输出方式打开文件。
      ifstream file2(“c:\pdos.def”);//以输入方式打开文件
      ofstream file3(“c:\x.123”);//以输出方式打开文件

    所以,在实际应用中,根据需要的不同,选择不同的类来定义:

    如果想以输入方式打开,就用ifstream来定义;

    如果想以输出方式打开,就用ofstream来定义;

    如果想以输入/输出方式来打开,就用fstream来定义。
      二、关闭文件
      打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,

    如:file1.close();

    就把file1相连的文件关闭。
      三、读写文件
      读写文件分为文本文件和二进制文件的读取.

    对于文本文件的读取比较简单,用插入器和析取器就可以了;

    对于二进制的读取就要复杂些,下要就详细的介绍这两种方式
      1、文本文件的读写
      文本文件的读写很简单:

    用插入器(<<)向文件输出;

    用析取器(>>)从文件输入。

    假设file1是以输入方式打开,file2以输出打开。

    示例如下:
      file2<<“I Love You”;//向文件写入字符串"I Love You"

    int i;
      file1>>i;//从文件输入一个整数值。
      这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些
      操纵符 功能 输入/输出
      dec 格式化为十进制数值数据 输入和输出
      endl 输出一个换行符并刷新此流 输出
      ends 输出一个空字符 输出
      hex 格式化为十六进制数值数据 输入和输出
      oct 格式化为八进制数值数据 输入和输出
      setpxecision(int p) 设置浮点数的精度位数 输出
    示例:
    #include
    #include
    using namespace std;

    void main( void )
    {
    //利用ofstream类的构造函数创建一个文件输出流对象来打开文件
    ofstream fout( “d:\mytest.txt” );
    if ( ! fout)
    {
    cout << “文件不能打开” <<endl;
    }
    else
    {
    // 输出到磁盘文件
    fout << “Learning C++ is very useful.”<< endl;
    //关闭文件输出流
    fout.close();
    //利用ifstream类的构造函数创建一个文件输入流对象
    ifstream fin( “d:\mytest.txt” );
    if ( ! fin)
    {
    cout << “文件不能打开” <<endl;
    }
    else
    {
    char buffer[80];
    // 从磁盘文件输入
    fin >> buffer;
    // 关闭文件输入流
    fin.close();
    cout << buffer << endl;
    }
    }
    ofstream file1;
    if (!file1)
    {
    cout << “文件不能打开” <<endl;
    }
    else
    {
    //open函数只有文件名一个参数,则是以读/写普通文件打开
    file1.open(“d:\mytest.txt”);
    //相当于file1.open(“d:\mytest.txt”,ios::out|ios::in,0);
    //文本文件的写:用插入器(<<)向文件输出.
    file1<<“写入文件操作!”<<endl;
    file1.close();
    }
    ifstream file2(“d:\mytest.txt”);
    if (!file2)
    {
    cout << “文件不能打开” <<endl;
    }
    else
    {
    char ch1[100];
    //文本文件的读:用析取器(>>)从文件输入.
    file2>>ch1;
    cout<<ch1<<endl;
    file2.close();
    }
    }
      2、二进制文件的读写
      ①put()
      put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put(‘c’);就是向流写一个字符’c’。
      ②get()
      get()函数比较灵活,有3种常用的重载形式:
     一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。
      另一种重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。
      还有一种形式的原型是:ifstream &get(char *buf,int num,char delim=’\n’);这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符’\n’。例如:
      file2.get(str1,127,‘A’); //从文件中读取字符到字符串str1,当遇到字符’A’或读取了127个字符时终止。
      ③读写数据块
      要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:
      read(unsigned char *buf,int num);
      write(const unsigned char *buf,int num);
      read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char ,有时可能需要类型转换。
      例:
      unsigned char str1[]=“I Love You”;
      int n[5];
      ifstream in(“xxx.xxx”);
      ofstream out(“yyy.yyy”);
      out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中
      in.read((unsigned char
    )n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换
      in.close();out.close(); 四、检测EOF

    成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是int eof();
      例:  if(in.eof()) ShowMessage(“已经到达文件尾!”);
      五、文件定位
      和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。seekg()是设置读位置, seekp是设置写位置。它们最通用的形式如下:
      istream &seekg(streamoff offset,seek_dir origin);
      ostream &seekp(streamoff offset,seek_dir origin);
      streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:
      ios::beg:  文件开头
      ios::cur:  文件当前位置
      ios::end:  文件结尾
      这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。例:
      file1.seekg(1234,ios::cur); //把文件的读指针从当前位置向后移1234个字节
      file2.seekp(1234,ios::beg); //把文件的写指针从文件开头向后移1234个字节

    c++中输出和输入导屏幕和键盘的类别声明包含再标题文件<iostrream.h>中,而磁盘类文件的 I/O则声明再包含标题文件<fstream.h>内。

    输入和输出格式:

    输出到磁盘 ofsteam 识别字(“文件名”)

    从磁盘读文件 ifsteam 识别字("文件名“)

    例如:

    ofstream outfile(“data.txt”); //写入到磁盘的data.txt中

    格式化输入输出:

    1 整数数据的输入输出

    整数数据存储再磁盘内,每个文字各占一个字节。

    例如:

    #include <fstream.h>

    #include <iostream.h>

    #inlude <conio.h>

    void main()

    {

    ofstream outfile(“data.txt”); //写入文件

    for(int i=0;i<10;i++)

    outfile<<i<<" "; //空格是为了避免数值连接在一起加上去的,此文件大小为20字节

    cout<<“ok,press a key!”;

    gerch();
    }

    程序执行后用记事本打开可以看到数据

    0 1 2 3 4 5 6 7 8 9

    同样读取文件语句为:

    int data;

    ifstream infile(“data.txt”);

    for(int i=0;i<10;i++)

    {

    infile>>data ; //读数据的时候因为数据间有一个空格才能完整的读出,

    cout<<data<<" "; //输出到屏幕,加上空格是为了分开数字

    }

    2 字符数据的输入

    字符的输出方式以put(ch)为存入语句,读取语句为get(ch)

    例如:

    char str[]=“hello this is a c++ programe!\n”

    “i know this difference \n”

    “and mocive”;

    ofstream outfile (“data.txt”);

    for(int i=0;i<strlen(Str);i++)

    outfile.put(str[i]);

    读取:

    char ch;

    ifstream infile(“data.txt”);

    while(infile)

    {

    infile.get(ch);

    cout<<ch;

    }

    getch();

    }

    3 字符串数据的输入

    数据多的时候读写速度比较快,输入时以整行字符串加上换行符号一次写入。读取的时候以语句getline(buffer,max),来读取整行数据,直到遇到换行符,每行结尾的\n并不读入,所以在 输出的时候需要加上换行符号,否则数据会连接在一起。

    例子:

    ofstream outfile(“strdata.txt”);

    outfile<<“use your vote\n”;

    outfile<<“ouse your weise\n”;

    读取:

    const MAX=80;

    char buffer[MAX];

    ifstream infile(“strdata.txt”);

    while(infile)

    {

    infile.getline(buffer,MAX);

    cout<<buffer<<endl;

    }

    4 浮点数

    浮点数因为有小数点,在存储数据时与整数相同,只要每个数据加上一个空格就可以区隔相邻的数据

    6 二进制文件

    上述的格式化文件比较占用硬盘控件,采用二进制存储就可以节约很多控件。它使用write,read()来存储和读取。

    ofstream 识别字(”文件名“,ios::binary);

    write( 写入地址,写入大小)

    ifstream 识别字(”文件名“,ios:binary);

    识别字.read(读取地址,读取大小);

    例如:infile.read((char*)buffer,sizeof(数据类型));

    关闭文件

    识别字.close();

    例子:

    ofstream outfile(“data.dat”,ios::binary);

    for(int i=0;i<100;i++)

    {

    n[0]=i+1;

    outfile.write((Char*)n,sizeof(int)); //还可以用变量和数组为例

    // outfile.write((Char*)&i,sizeof(int)); i 为变量

    // outfile.write((Char*)n,sizeof(int)); n为数组

    }

    outfile.close();

    ifstream inifile(“data.dat”,ios:binary);

    for(i=0;i<100;i++)

    { inifile.read((Char*)n,sizeof(int);

    cout<<n[0]<<" ";

    }

    7 随机存取文件

    文件能够随意读出,读出后又可以更新,更新后可以回存到源文件内。fstream file ;

    file.open(“文件名”,存取模式);

    file.open(“x.dat”,ios::app|ios::in|ios::out|ios::binary);

    in 打开文件输入或者读取 ifstream

    out 打开文件输出或者写入 ofstream

    ate 从文件尾开始写入或者读取

    app 加在文件尾

    arunc 若文件存在,讲其长度设为0

    binary 打开二进制文件

    二进制文件中有一个指针,指向当前数据在文件中的位置,这个文件指针和一般的指针变量不一样,它只是一个纯粹的指示器。

    函数介绍

    seekg()

    seekg(0) 指针移到文件的最前面

    seekg(0,ios::cur);把当前的指针当作0

    seekg(0,ios::end);将指针移到文件尾,若再配合file.tellg()则可以求出文件的大小为多少bytes

    以下两个操作都必须在文件关闭后才可以使用

    remove("文件名”);把这个文件删除

    rename(“旧文件名”,“新文件名”);

    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
     int n[5] = {1, 2, 3, 4, 5};
     register int i;
     ofstream out("test", ios::out | ios::binary);
     if(!out) {
     cout << "Cannot open file.\n";
     return 1;
     }
     out.write((char *) &n, sizeof n);
     out.close();
     for(i = 0; i <5; i++) // clear array
     n[i] = 0;
     ifstream in("test", ios::in | ios::binary);
     if(!in) {
     cout << "Cannot open file.\n";
     return 1;
     }
     in.read((char *) &n, sizeof n);
     for(i = 0; i <5; i++) // show values read from file
     cout << n[i] << " ";
     in.close();
     return 0;
    }
    
    ---------------------
    
    本文来自 黄常宇的马达加斯加 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/doraemon___/article/details/53349754?utm_source=copy 
    
    展开全文
  • Python中的文件是对象。通过open() 打开一个文件,获取一个文件对象,然后对文件进行读写操作,如下示例。# 读写打开一个UTF-8编码格式文件,如果文件不存在则创建 一、open()打开文件获取文件对象 open() 函数参数...

    Python中的文件是对象。

    通过open() 打开一个文件,获取一个文件对象,然后对文件进行读写操作,如下示例。

    # 读写打开一个UTF-8编码格式文件,如果文件不存在则创建
    

    一、open()打开文件获取文件对象

    open() 函数参数说明

    open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

    open()函数用于打开一个文件,创建一个 file 对象,改对象的相关的方法才可以被调用对文件进行读写。

    file 文件的路径,需要带上文件名包括文件后缀(c:1.txt)

    mode 打开的方式(r,w,a,x,b,t,r+,w+,a+,U)

    buffering 缓冲的buffering大小, 0,就不会有寄存。1,寄存行。大于 1 的整数,寄存区的缓冲大小。负值,寄存区的缓冲大小为系统默认。

    encoding 文件的编码格式(utf-8,GBK等)

    常用文件的打开模式(完整列表见附件)

    r 以只读方式打开文件。文件的指针会放在文件的开头。

    w 以写入方式打开文件。文件存在覆盖文件,文件不存在创建一个新文件。

    a 以追加方式打开文件。如果文件已存在,文件指针放在文件末尾。如果文件不存在,创建新文件并可写入。

    r+ 打开一个文件用于读写。文件指针会放在文件的开头

    w+ 打开一个文件用于读写。文件存在覆盖文件,文件不存在创建一个新文件。

    a+ 打开一个文件用于读写。如果文件已存在,文件指针放在文件末尾。如果文件不存在,创建新文件并可写入。

    记忆方法:记住r读,w写,a追加,每个模式后加入+号就变成可读写。

    file

    二、文件的读取与写入

    文件读取:

    file.read([size]):读取文件(读取size个字符,默认读取全部)
    file.readline()):读取一行
    file.readlines():读取完整的文件,返回每一行所组成的列表

    本地目录新建一个文件woodman.txt,文件内容如图:

    v2-c6cd344c896ca3d1c0896e7365495423_b.jpg

    示例:

    file 

    输出结果:

    Hello, woodman.
    你好
    -------
    !木头人。
    朋友们,大家好。
    -------
    Hello, woodman.
    
    -------
    ['Hello, woodman.n', '你好!木头人。n', '朋友们,大家好。']

    注意:文件读取后光标停止在读取结束的位置,file.seek(size) 将光标指针移动到文件的size位置。

    文件写入:

    file.write(str):将字符串写入文件

    file.writelines(lines):将多行文本写入文件中,lines为字符串组成的列表或元组

    示例:

    file 

    运行程序后文件内容:

    hello,
    woodman
    ------------------
    你好!
    我是木头人。
    
    ------------------
    Python是一门解释型语言
    python非常简单

    文件对象的其他方法:

    file.seek(偏移量,[起始位置]): 用来移动文件指针.

    偏移量:单位:比特,可正可负

    起始位置:0-文件头部,默认值;1-当前位置;2-文件结尾

    file.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的比特数)

    file.close(): 关闭文件

    附件:

    v2-64987b4c63978a80d0f185c7c2d7e5f7_b.jpg
    展开全文
  • 梳理python异常处理方法:try/except/else/finally/raise/assertpython文件读写:open/write目录1.异常处理处理单个异常:try/except多个异常一种方式处理:元组包含多个异常类型多个异常各自特异处理:多个except...

    "pythonic生物人"的第48篇分享0d8369d3f59890f18c7f0b8d8954ad7e.png649b4f2fce8bb74b92019a3a1096bd95.png649b4f2fce8bb74b92019a3a1096bd95.png

    梳理python异常处理方法:try/except/else/finally/raise/assertpython文件读写:open/write

    目录

    1.异常处理处理单个异常:try/except多个异常一种方式处理:元组包含多个异常类型多个异常各自特异处理:多个except语句处理所有异常:Exception 捕获所有异常脚本执行之后做清理工作:finally没有触发异常的时候执行一些任务:try/else主动触发某个异常类型:raise满足某个条件触发异常:assertpython3中内置标准异常类型2.Python中文件读写python3中open函数一次读取整个文件逐行读取文件覆盖已有内容写入文件 追加内容写入文件

    正文开始啦

    1.异常处理

    异常处理不建议随便乱用,过度使用使得代码可读性变差;在异常无法预知的情况下建议使用异常处理,其他异常尽量解决。

    处理单个异常:try/except

    可能触发异常的代码会放到try语句块里,处理异常的代码放在except语句块里。

    try:#try代码块中任何一行代码报错,该行代码后面的语句就不会执行,抛出错误类型。
        file = open('test''rb')except IOError as e:#IOError为异常类型,如果try中抛出的错误正好是该异常类型,执行except中代码处理掉异常,程序继续执行,否则终止程序。
        print('An IOError occurred. {}'.format(e.args[-1]))#处理异常的代码 。

    An IOError occurred. No such file or directory

    多个异常一种方式处理:元组包含多个异常类型

    把所有可能发生的异常类型存储到一个元组中。

    try:
        file = open('test''rb')except (IOError, EOFError) as e:#多个异常类型存储在(IOError, EOFError)元组中
        print("An error occurred. {}".format(e.args[-1]))

    An error occurred. No such file or directory

    多个异常各自特异处理:多个except语句

    对每个异常类型使用一个except语句块处理

    try:
        file = open('test''rb')except EOFError as e:#该except处理EOFError类型异常
        print("An EOF error occurred.")except IOError as e:#该except处理IOFError类型异常
        print("An error occurred.")

    An error occurred.

    处理所有异常:Exception 捕获所有异常

    try:
        file = open('test''rb')except Exception as e:#Exception捕获所有的异常类型,保存到args的元组中。
        print('All exceptions {}'.format(e.args))

    All exceptions (2, 'No such file or directory')

    脚本执行之后做清理工作:finally

    finally中的代码块不管异常是否被触发都会被执行,常用来在脚本执行之后做清理工作。

    try:
        file = open('test''rb')except IOError as e:
        print('An IOError occurred. {}'.format(e.args[-1]))finally:#该语句块一定会执行,无论try中是否触发代码,无论except中是否处理异常。
        print("This would be printed whether or not an exception occurred!")

    An IOError occurred. No such file or directory
    This would be printed whether or not an exception occurred!

    没有触发异常的时候执行一些任务:try/else

    try代码块中异常没被触发,执行else语句块。

    try:
        print('I am sure no exception is going to occur!')except Exception:
        print('exception')else:#try语句块没有触发异常时运行;该代码块中异常不会被捕获。
        print('This would only run if no exception occurs. And an error here ''would NOT be caught.')finally:
        print('This would be printed in every case.')

    I am sure no exception is going to occur!
    This would only run if no exception occurs. And an error here would NOT be caught.
    This would be printed in every case.

    主动触发某个异常类型:raise

    try:raise IOError('一个主动触发的异常类型')#这个异常主动触发except Exception as e:
        print(e.args)

    ('一个主动触发的异常类型',)

    满足某个条件触发异常:assert

    try:assert False,"前面bool判断为False是触发异常"except Exception as e:
        print(e.args)

    ('前面bool判断为False是触发异常',)

    python3中内置标准异常类型

    本小菜鸟表示只见过几个,如ZeroDivisionError、ImportError、IndexError、KeyError、TypeError、ValueError、SystemError等少数几个。python3中内置的异常类型及各异常之间的继承关系,各异常类型的触发原因见下表:

    python内置标准异常类型

    及继承关系(python3.8.3)

    触发异常原因
    BaseException所有内置异常的基类。
     +-- SystemExitsys.exit()函数引发。
     +-- KeyboardInterrupt当用户按下中断键(通常为Control-C或Delete)时将被引发。
     +-- GeneratorExit当一个生成器generator或coroutine被关闭时将被引发
     +-- Exception所有内置的非系统退出类异常和自定义异常都派生自此类。
          +-- StopIteration内置函数next()和迭代器iterator的__next__()方法所引发。
          +-- StopAsyncIteration由一个asynchronous iterator对象的__anext__()方法来引发以停止迭代操作。
          +-- ArithmeticError各种算术类错误而引发的内置异常
          |    +-- FloatingPointError目前未被使用,呵呵~。
          |    +-- OverflowError当算术运算的结果大到无法表示时将被引发。
          |    +-- ZeroDivisionError当除法或取余运算的分母为零时将被引发。
          +-- AssertionError当assert(bool判断触发异常)语句失败时将被引发。
          +-- AttributeError当属性引用或赋值失败时将被引发(经常见)。
          +-- BufferError当与缓冲区相关的操作无法执行时将被引发。
          +-- EOFError当input()函数未读取任何数据即达到文件结束条件(EOF)时将被引发。
          +-- ImportError导入模块时引发,当import加载模块和from/import中的"from list"存在无法找到的名称时被引发。
          |    +-- ModuleNotFoundError一个模块无法被定位时将由import引发,当在sys.modules中找到None时也会被引发。
          +-- LookupErrorIndexError,KeyError异常引发及codecs.lookup()直接引发。
          |    +-- IndexError超过序列类数据结构(list,str等)索引范围时将被引发。
          |    +-- KeyError映射类数据结构(dict)中找不到键时将被引发。
          +-- MemoryError当一个操作耗尽内存但情况仍可(通过删除一些对象)进行挽救时将被引发。
          +-- NameError当某个局部或全局名称未找到时将被引发。
          |    +-- UnboundLocalError当在函数或方法中对某个局部变量进行引用,但该变量并未绑定任何值时将被引发。
          +-- OSError根据系统错误代码被引发。
          |    +-- BlockingIOError当一个操作会被某个设置为非阻塞操作的对象(例如套接字)所阻塞时将被引发。
          |    +-- ChildProcessError当一个子进程上的操作失败时将被引发。对应于errno ECHILD。
          |    +-- ConnectionError与连接相关异常的基类。
          |    |    +-- BrokenPipeError当试图写入另一端已被关闭的管道,或是试图写入已关闭写入的套接字时将被引发。对应于errno EPIPE和ESHUTDOWN。
          |    |    +-- ConnectionAbortedError当连接尝试被对端中止时将被引发。对应于errno ECONNABORTED。
          |    |    +-- ConnectionRefusedError当连接尝试被对端拒绝时将被引发。对应于errno ECONNREFUSED。
          |    |    +-- ConnectionResetError当连接被对端重置时将被引发。对应于errno ECONNRESET。
          |    +-- FileExistsError当试图创建一个已存在的文件或目录时将被引发。对应于 errno EEXIST。
          |    +-- FileNotFoundError当所请求的文件或目录不存在时将被引发。对应于errno ENOENT。
          |    +-- InterruptedError当系统调用被输入信号中断时将被引发。对应于errno EINTR。
          |    +-- IsADirectoryError当请求对一个目录执行文件操作(例如os.remove())将被引发。对应于errno EISDIR。
          |    +-- NotADirectoryError当请求对一个非目录对象执行目录操作(例如os.listdir())时将被引发。对应于errno ENOTDIR。
          |    +-- PermissionError当在没有足够操作权限的情况下试图执行某个操作时将被引发——例如缺少文件系统权限。对应于errno EACCES和EPERM。
          |    +-- ProcessLookupError当给定的进程不存在时将被引发。对应于errno ESRCH。
          |    +-- TimeoutError当一个系统函数发生系统级超时的情况下将被引发。对应于errno ETIMEDOUT。
          +-- ReferenceError此异常将在使用weakref.proxy()函数所创建的弱引用来访问该引用的某个已被作为垃圾回收的属性时被引发。
          +-- RuntimeError当检测到一个不归属于任何其他类别的错误时将被引发。关联的值是一个指明究竟发生了什么问题的字符串。
          |    +-- NotImplementedError在用户自定义的基类中,抽象方法应当在其要求所派生类重载该方法,或是在其要求所开发的类提示具体实现尚待添加时引发此异常。
          |    +-- RecursionError解释器检测发现超过最大递归深度被引发。
          +-- SyntaxError当解析器遇到语法错误时将被引发。
          |    +-- IndentationError与不正确的缩进相关的语法错误的基类。
          |         +-- TabError当缩进包含对制表符和空格符不一致的使用时将被引发。
          +-- SystemError当解释器发现内部错误,但情况看起来尚未严重到要放弃所有希望时将被引发。
          +-- TypeError当一个操作或函数被应用于类型不适当的对象时将被引发。
          +-- ValueError当操作或函数接收到具有正确类型但值不适合的参数,并且情况不能用更精确的异常例如IndexError来描述时将被引发。
          |    +-- UnicodeError当发生与Unicode相关的编码或解码错误时将被引发。
          |         +-- UnicodeDecodeError当在"解码过程"中发生与Unicode相关的错误时将被引发。
          |         +-- UnicodeEncodeError当在"编码过程"中发生与Unicode相关的错误时将被引发。
          |         +-- UnicodeTranslateError在"转写过程"中发生与Unicode相关的错误时将被引发。
          +-- Warning警告类别的基类。
               +-- DeprecationWarning如果所发出的警告是针对其他Python开发者的,则以此作为与已弃用特性相关警告的基类。
               +-- PendingDeprecationWarning对于已过时并预计在未来弃用,但目前尚未弃用的特性相关警告的基类。
               +-- RuntimeWarning与模糊的运行时行为相关的警告的基类。
               +-- SyntaxWarning与模糊的语法相关的警告的基类。
               +-- UserWarning用户代码所产生警告的基类。
               +-- FutureWarning如果所发出的警告是针对以Python所编写应用的最终用户的,则以此作为与已弃用特性相关警告的基类。
               +-- ImportWarning与在模块导入中可能的错误相关的警告的基类。
               +-- UnicodeWarning与Unicode相关的警告的基类。
               +-- BytesWarning与bytes和bytearray相关的警告的基类。
               +-- ResourceWarning与资源使用相关的警告的基类。会被默认的警告过滤器忽略。

    2.Python中文件读写

    python3中open函数

    语法:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

    file,被打开的文件;
    mode,打开模式,默认为‘r’即读取模式;
    详细如下表:

    字符

    含义

    'r'

    读取(默认)

    'w'

    覆盖写入,如果文件中已有内容,则覆盖

    'x'

    排它性创建,如果文件已存在则失败

    'a'

    追加写入,如果文件已有内容,则在末尾追加

    'b'

    二进制模式

    't'

    文本模式(默认)

    '+'

    更新磁盘文件(读取并写入)

    buffering,设置缓冲;encoding,一般使用utf8,没有指定,则根据平台来决定使用的编码;......(后面的我很少用)

    一次读取整个文件

    file = './test.txt'#指定文件路径及文件with open(file,encoding='gbk'as f:#关键字with 在不再需要访问文件后自动将其关闭,所以不需要close关闭文件。
        contents = f.read()#方法read()读取文件的全部内容,以字符串的形式存储在变量contents中    
    print(contents)

    逐行读取文件

    file = './test.txt'with open(file) as f:for line in f:#使用for循环
            line = line.strip()#strip去掉每行末尾换行符
            print(line)

    覆盖已有内容写入文件

    file = './test.txt'with open(file,encoding='gbk'as f:
        contents = f.read()with open("./test1.txt"'w'as f:#'w'覆盖已有文件内容
        f.write(contents)

    #test1.txt中内容651313958fe6b25b872a53214abe593b.png

    追加内容写入文件

    file = './test.txt'with open(file,encoding='gbk'as f:
        contents = f.read()with open("./test1.txt"'w'as f:#'w'覆盖已有文件内容
        f.write(contents)

    test1.txt中内容,末尾追加了一行,不覆盖已有内容。514ad7a02fb1ec5186c64de0e1f6aa45.png


    参考资料

    https://www.cnblogs.com/Eva-J/articles/7281240.html
    https://www.cnblogs.com/f-ck-need-u/p/10116936.html
    https://docs.python.org/zh-cn/3.8/library/exceptions.html
    《Intermediate Python》
    Python编程:从入门到实践
    https://www.runoob.com/python3/python3-func-open.html

    同系列文章
    python3基础08函数(python内置)python3基础09列表推导式|迭代器|生成器|匿名函数python3基础10面向“对象”编程

    0d8369d3f59890f18c7f0b8d8954ad7e.png0d8369d3f59890f18c7f0b8d8954ad7e.png原创不易"点赞"、"在看"b02732205e44a4e19a547135344c3197.png励下呗b6c2edaa253dc50f4cafa99832d0a8d6.png7204c1962920f5051b5c5fe4b488cfd2.png

    5c9eddc4514e81b311ea4905ecc52492.png

    展开全文
  • 各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理文件处理的基本操作。主要从以下几个方面进行介绍:读取文件写入文件重命名文件读取目录读取目录下的文件创建目录...

    各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理和文件处理的基本操作。主要从以下几个方面进行介绍:

    读取文件

    写入文件

    重命名文件

    读取目录

    读取目录下的文件

    创建目录

    在创建目录下写入文件

    不同文件格式之间进行转换

    334d56d600c622163c11e49bee3cb2da.png

    1.打开文件 --> 关闭文件。

    打开文件:

    //filename 是字符串,用来命名文件,mode是访问模式FILE *fopen( const char * filename, const char * mode );//二进制文件,使用下面的访问模式关键字//"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

    以下为各访问模式及参数的意义:

    r 打开一个已有的文本文件,允许读取文件。

    w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件,程序会从文件的开头写入内容。如果文件存在,则该文件会被截断为零长度,重新写入。

    a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件,会在已有的文件内容中追加内容。

    r+ 打开一个文本文件,允许读写文件。

    w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。

    a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

    2.关闭文件

    //用于关闭文件int fclose( FILE *fp );

    3.写入文件

    //把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,//如果发生错误,则会返回 EOFint fputc( int c, FILE *fp );//把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,//如果发生错误,则会返回 EOFint fputs( const char *s, FILE *fp );//将格式化字符串写入到文件中int fprintf(FILE *fp,const char *format, ...);

    4.读取文件

    //读取单个字符,返回值是读取的字符,如果发生错误则返回 EOFint fgetc( FILE * fp );//函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,//并在最后追加一个 null 字符来终止字符串。char *fgets( char *buf, int n, FILE *fp );//在遇到第一个空格字符时,会停止读取int fscanf(FILE *fp, const char *format, ...);

    5.二进制I/O函数

    //存储块的读写 - 通常是数组或结构体size_t fread(void *ptr, size_t size_of_elements,size_t number_of_elements, FILE *a_file);size_t fwrite(const void *ptr, size_t size_of_elements,size_t number_of_elements, FILE *a_file);

    6.目录操作

    int mkdir(const char *pathname, mode_t mode);//打开一个目录DIR * opendir(const char* path);//读取dir_handle目录下的目录项,如果有未读取的目录项,返回目录项,否则返回NULL。struct dirent * readdir(DIR * dir_handle);//关闭目录int closedir(DIR * dir_handle);

    7.删除文件

    //filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()处理;//若参数filename 为一目录,则调用rmdir()来处理。int remove(char * filename);

    以上为我总结的C语言对文件进行处理,文件处理的基本操作,如果对你有用那就收藏备用啦。后续会更新C sharp、Java、Python对文件的基本操作。有兴趣的关注我,为你带来更多干货。

    展开全文
  • C++文件的读取和写入 #include #include #include using namespace std; int main(){ char buffer[256]; ifstream myfile ("c:\\a.txt"); ofstream outfile("c:\\b.txt"); if(!myfile){ cout
  • 输入输出相关类 C++中输入出的类的关系如图所示: 其中对文件的操作相关类为...对输入输出文件,有输入输出指针,可以通过seekp()或seekg()函数来改变指针指向的位置,从而读取写入文件的不同位置,比如对...
  • 博客1:C++文本文件的读取和写入 博客2:C++创建txt文件并读写 博客3:C++文件流在ios类中定义 博客4:C++文件操作详解(ifstream、ofstream、fstream) 使用文件流对象打开文件后,文件就成为一个输入流或输出流。...
  • 成员函数流操纵算子同样适用于文件流,因为 ifstream 是 istream 派生类,ofstream 是 ostream 派生类,fstream 是 iostream 派生类,而 iostream 又是从 istream ostream 共同派生而来。...
  • 当前内容主要为本人学习记录C++的文件写入和读取操作 主要包括 使用ifstream读取文件内容 使用ofstream向文件写入内容 2.写入demo /* * FileWriteTxtTest.cpp * * Created on: 2021年5月3日 * Author: hy ...
  • /* 项目中使用到一个conf配置文件读取文件。修改其中数据并重新保存进去 记录下来方便下次使用 */#include #include #include #include #include #include using namespace std;//字符串分割 void split
  • 文件的读取和写入————C++c++下对于文件读取进行操作的方式特别类似于对标准输入输出流cin,cout进行的操作,这里面用的头文件是#include<fstream>  其中包含了三个类fstream,ifstream,ofstream,...
  • #include #include using namespace std; int main(){ /* source file : filein.txt target file : fileout.txt file structure : 编译原理 |——file.cpp |——filein.txt |——fileout.txt ...
  • C++文件的写入和读取

    2017-05-18 11:28:17
    c++文件的写入和读取,自用
  • C++中txt文件的读取和写入

    千次阅读 2015-03-29 19:29:11
    C++中Txt文件读取和写入 一、ASCII 输出 为了使用下面方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代,所有的C++标准头文件都是无后缀。)。这是 一个扩展集, 提供有缓冲的文件输入输出操作. ...
  • 文件的读取和写入c++

    2017-05-02 14:10:19
    文件的读取,S是一个学生链表 , typedef struct Student {  string no; //学号  string name; //姓名  string cla; //班级 string sex; //性别  string phone; /手机号码 string sele; //选修...
  • 按行读取: 假设有一个文本文件,如下...目的:按照行读取数据,并一个个显示出来。 代码如下: #include <iostream> #include <sstream> #include <fstream> #include <string>...
  • 今天小编就为大家分享一篇c++读取和写入TXT文件的整理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 809
精华内容 323
关键字:

c++文件的读取和写入

c++ 订阅