精华内容
下载资源
问答
  • Python文件输入输出

    千次阅读 2019-06-18 21:18:23
    文章目录文件输入文件输出 本文以.txt文件为例,说明Python从.txt文件中读取内容和向.txt文件写入内容的方法。 a.txt文件内容: 犬吠水声中,桃花带雨浓。 树深时见鹿,溪午不闻钟。 野竹分青霭,飞泉挂碧峰。 无人...


    本文以.txt文件为例,说明Python从.txt文件中读取内容和向.txt文件写入内容的方法。
    a.txt文件内容:

    犬吠水声中,桃花带雨浓。
    树深时见鹿,溪午不闻钟。
    野竹分青霭,飞泉挂碧峰。
    无人知所去,愁倚两三松。

    文件输入

    读取文件:

    open(filename, mode)

    open返回一个文件对象。第一个参数是一个包含文件名的字符串。第二个参数是描述文件的使用模式,mode='r’表示只读,mode='w’表示只写,mode=‘r+’表示可读可写,mode=‘a’表示打开文档并把要写的内容附在文档末尾,不会删除文档已有内容。默认模式为’r’。

    poem = open('./a.txt', 'r')
    print(poem)
    
    # 输出
    # <_io.TextIOWrapper name='./a.txt' mode='r' encoding='UTF-8'>
    
    poem = open('./a.txt', 'r')
    print(list(poem))
    
    # 输出
    # ['犬吠水声中,桃花带雨浓。\n', '树深时见鹿,溪午不闻钟。\n', '野竹分青霭,飞泉挂碧峰。\n', '无人知所去,愁倚两三松。\n']
    

    通常我们使用with关键字来读取文件对象,with关键字可以在with语句结束后自动关闭文件,避免一直占用计算机内存资源。

    with open('./a.txt', 'r') as f:
        d = f.read()
        print(d)
    print(f.closed)
    
    # 输出
    # 犬吠水声中,桃花带雨浓。
    # 树深时见鹿,溪午不闻钟。
    # 野竹分青霭,飞泉挂碧峰。
    # 无人知所去,愁倚两三松。
    # True
    

    除了读取文件中的所有内容,我们还可以一行一行的读取文件。

    with open('./a.txt') as f:
        for line in f:
            print(line)
    
    # 输出
    # 犬吠水声中,桃花带雨浓。
    
    # 树深时见鹿,溪午不闻钟。
    
    # 野竹分青霭,飞泉挂碧峰。
    
    # 无人知所去,愁倚两三松。
    

    因为在每一行末尾处都带有换行符,因此每行之间都有一行为空。可以验证一下:

    with open('./a.txt') as f:
        d = f.readlines()
        print(d)
    
    # 输出
    # ['犬吠水声中,桃花带雨浓。\n', '树深时见鹿,溪午不闻钟。\n', '野竹分青霭,飞泉挂碧峰。\n', '无人知所去,愁倚两三松。\n']
    

    我们可以通过str.strip([chars])函数来删除字符串末尾的换行符。strip()函数可以删除字符串首尾的指定字符或者字符串,参数chars指定了要删除的字符的集合。如果没有指定,则默认为空格或者换行符。但是strip()只能删除开头或者结尾的字符或字符串,不能删除中间部分的字符。

    with open('./a.txt') as f:
        for line in f:
            print(line.strip())
    
    # 输出
    # 犬吠水声中,桃花带雨浓。
    # 树深时见鹿,溪午不闻钟。
    # 野竹分青霭,飞泉挂碧峰。
    # 无人知所去,愁倚两三松。
    

    因为字符串是不可变对象,因此,strip()函数并不是在原来的字符串中直接进行删除,而是将删除首尾字符后的字符串作为一个新对象并返回。可以验证一下:

    a = '  special  ' # 创建一个字符串对象并将变量a指向它
    print(id(a)) # 打印a在内存中的地址
    a = a.strip() # 将删除首尾空格后的字符串作为一个新对象,并将a指向它
    print(id(a)) # 打a串在内存中的地址
    
    # 输出
    # 140251513494960
    # 140251513470680
    

    可得看到,删除前后的字符串地址并不相同,说明它们是不同的对象。

    文件输出

    with open('./a.txt', 'a') as f:
        f.write('作者:李白\n')
    
    with open('./a.txt', 'r') as f:
        for line in f:
            print(line.strip())
    
    # 输出
    # 犬吠水声中,桃花带雨浓。
    # 树深时见鹿,溪午不闻钟。
    # 野竹分青霭,飞泉挂碧峰。
    # 无人知所去,愁倚两三松。
    # 作者:李白
    
    展开全文
  • C语言 文件输入输出

    千次阅读 2018-04-08 18:31:26
    1.C提供了两种访问文件的途径: 二进制模式和文本模式二进制中: 程序可以访问文件的每个字节, 文本模式中,程序所见的内容与实际内容不同,以二进制模式打开时:rebcca clutched the\r\n; 以文本模式打开时:...

    1.C提供了两种访问文件的途径: 二进制模式和文本模式

    二进制中: 程序可以访问文件的每个字节, 文本模式中,程序所见的内容与实际内容不同,以二进制模式打开时:rebcca clutched the\r\n; 以文本模式打开时:rebecca clutched the\n 2.如何用标准I/O读取文件和统计文件中的字符数:

    #include <stdio.h>
    #include <stdlib.h>//提供exit()原型
    int main()
    {
    int ch;   /// 读取文件时,储存每个字符的地方
    FILE *fp;   //文件指针
    unsigned long count = 0;
    if ( argc != 2 )
    {
    printf("Usage: %s filename\n",argv[0]);
    exit(EXIT_FAILURE); ///EXIT_FAILURE用于表明结束程序失败
    }
    if ( ( fp = fopen(argv[1], "r")) == NULL )
    {
    printf("Can't open %s\n",argv[1]);
    exit(EXIT_FAILURE);//
    }
    while ( ( ch == getc(fp) ) != EOF )
    {
    putc(ch, stdout);  //putchar(ch)相同
    //stdout作为与标准输出相关联的文件指针,
    count++;
    }
    fclose(fp);
    printf("File %s has %lu characters\n",argv[1], count);
    return 0;
    }
    

    exit函数: 关闭所有打开的文件并结束程序,正常结束的程序传递为0,异常结束的程序传递非0值。标准要求0 或 宏EXIT_SUCCESS用于表明成功结束程序

    一般情况下 return 0与exit(0)效果相同,但在递归函数中exit()仍会终止程序,return 则是把控制权交给上一层递归 这两个还有一个区别是:即使在其他函数中(除main外)调用exit()函数也会结束整个程序 fopen()函数:使用fopen函数打开文件,第一个参数是待打开文件的名称,更确切的说是一个包含该文件名的字符串的地址。第二个参数是一个字符串,指定待打开文件的模式。 程序成功打开文件后,fopen()将返回文件指针,其他I\O函数可以用这个指针指定该文件。文件的指针类型是指向FILE的指针,FILE是一个定义在stdio.h中派生类型。文件指针fp并不指向实际文件,它指向一个包含文件信息的数据对象,其中包含很多。。。 以下为一些模式: “r”: 以读模式打开文件 “w”: 以写模式打开文件把现有文件的长度截为0,如果文件不存在,则创建一个新文件 “a”: 以写模式打开文件,在现有文件末尾添加内容,如果文件不存在,则创建一个新文件 “r+”: 以更新模式打开文件(即可以读写文件) “w+”: 以更新模式打开文件(即读和写),在现有文件的末尾添加内容,如果文件不存在则创建一个新文件 “a+”: 以更新模式打开文件(即读和写),在现有文件的末尾添加内容,如果文件不存在则创建一个新文件;可以读整个文件,但是只能从末尾添加内容 “rb”,“wb”,"ab","rb+","r+b","wb+","w+b","ab+","a+b": 与上一个模式类似,但是以二进制模式而不是文本模式打开文件 “wx”,"wbx","w+x","wb+x","w+bx": 类似非x模式,但是如果文件已存在或以独占模式打开文件夹,则打开文件夹失败 C11新增的带x字母的写模式,比传统的写模式具有更多特性,第一:如果以传统的写模式打开一个现有文件,fopen()会把该文件的长度截为0,这样就丢失了该文件的内容,但是使用带x字母的写模式,即使fopen()操作失败,原文件的内容也不会被删除。第二,x的独占特性使得其他程序或线程无法访问正在被打开的文件

    .getc()和putc()函数

    要告诉getc()和putc()函数使用哪一个文件,下面这条语句意思:从标准输入中获取一个字符 ch = getchar(); 然而下面这条语句的意思是: 从fp指定的文件中获取一个字符: ch = getc(fp); 与此类似,下面语句的意思是 把字符ch放入FILE指针fpout指定的文件中: putc(ch, fpout);

    .文件结尾

    当getc()函数在读取一个字符时发现是文件结尾,它将返回一个特殊值EOF。 为了避免读到空文件,应该使用入口条件循环(不是do while)进行文件输入。鉴于getc的设计,程序应该在进入循环体之前先尝试读取。如下面的设计所示:

    int ch;    //int类型变量储存EOF
    FILE *fp;
    fp = fopen("wacky.txt","r");
    ch = getc(fp);   //   获取初始输入
    while ( ch != EOF )
    {
    putchar(ch); // 处理输入
    ch = getc(fp);  // 获取下一个输入
    }
    
    .fclose()函数

    fclose(fp)函数guanbifp指定的文件,必要时刷新缓冲区。若成功关闭,fclose()函数返回0,否则返回EOF: if ( fclose(fp) != 0 ) printf("Error in closing file %s\n",argv[1]);

    .指向标准文件的指针:stdio.h把三个文件指针与三个标准文件关联,C程序会自动打开这三个标准文件:

    标准文件 文件指针 通常使用的设备
    标准输入 stdin 键盘 标准输出 stdout 显示器 标准错误 stderr 显示器

    用一个程序实例创建一个新文件,并写入内容 文件压缩程序的原理: 把一个文件中选定的数据拷贝到另一个文件中,该程序同时打开了两个文件,以“r” 模式打开一个,以“w”模式打开一个,该程序以保留每三个字符中的第一个字符的方式压缩第一个文件的内容。最后,把压缩后的文本存入第二个文件。第二个文件的名称是第一个文件名加上.red后缀。使用命令行参数,同时打开多个文件,以及在原文件名后面加上后缀,都是相当有用的技巧。如下:

    #include <stdio.h>
    #include <stdlib.h> //提供exit(
    #include <string.h> // 提供strcpy(),stract()原型
    #define LEN 40
    int main()
    {
    FILE *in,*out;//声明两个指向FILE的指针,因为该程序同时打开了两个文件
    int ch;
    char name[LEN];//储存输出文件名
    int count = 0;
    //检查命令行参数
    if ( argc < 2 )
    {
    fprintf(stderr , "Usage: %s filename\n",argv[0]);
    exit(EXIT_FAILURE);
    }
    //设置输入  *** 不能用else if 
    if ( (in = fopen(argv[1], "r")) == NULL )  //
    {
    fprintf(stderr,"I couldn't open the file\"%s\"\n",argv[1]);//I couldn't open the file存放进argv[1]中,并发送argv[1]中的信息到指定的stderr文件||  程序利用stderr指针把错误消息发送至标准错误
    exit(EXIT_FAILURE);
    }
    //设置输出
    strncpy(name, argv[1], LEN - 5);//拷贝文件名
    //strncpy  更谨慎的选择,因为 该函数的第三个参数指明可拷贝的最大字符数。
    name[LEN-5] = '\0';//LEN - 5.red后缀和末尾的空字符预留了空间
    }
    strcat(name,".red");   // 在文件名后添加.red
    //name中的第一个空字符'0'在调用strcat函数时,被.red覆盖,生成eddy.red
    if ( (out = fopen(name, "w") ) == NULL ) // 是否成功的以写模式打开名为eddy.red的文件
    //这个步骤在一些环境中相当重要,因为像strang.c.red这样的文件名可能是无效的
    {
    fprintf(stderr,"Can't create output file.\n");
    exit(3);//非正常运行导致退出程序 
    }
    //拷贝数据
    while ( ( ch = getc(in)) != EOF )
    {
    if ( count++ %3 == 0 )
    putc(ch, out); // 打印三个字符中的第一个字符
    //收尾工作
    if ( fclose(in) != 0 || fclose(out) = 0 
    fprintf(stderr, "Erroe in closing files\n");
    return 0;
    }
    

    int main(int argc, char** argv)
    第一个参数int argc,表示命令行参数的个数。第二个参数char *argv[]是一个指向命令行参数的指针数组,每一参数又都是以空字符(null) 结尾的字符串。第一个字符串,亦即argv[0]指向的,(通常)是该程序的名称。argv中的指针列表以NULL指针结尾(即argv[argc]为NULL)。 argv[1]为DOS命令行后执行命令的第一个字符串,argv[2]为执行程序名后的第二个字符串


    展开全文
  • C语言对文件输入输出

    千次阅读 多人点赞 2018-09-03 18:31:51
    C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以...1.1 C语言用标准输入输出函数fopen来实现打开文件,fopen函数的调用方式为: fopen(文件名,使用文...

    C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以字符(字节)为单位的。输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制,这就增加了处理的灵活性。这种文件称为流式文件。


    一、打开与关闭文件

    1.1 C语言用标准输入输出函数fopen来实现打开文件,fopen函数的调用方式为:

    fopen(文件名,使用文件方式) //示例fopen( ” a1 “, ” r ” );
    返回值:失败返回NULL
    文件使用方式:
    “r”(只读) “w”(只写) “a”(追加) “rb”(二进制只读) “wb”(二进制只写) “ab”(二进制追加)
    “r+”(打开文本文件读写) “w+”(建立一个新的文本文件读写) “a+”(打开一个文本文件读写)
    “rb+”(打开一个二进制文件读写) “wb+”(建立一个新的二进制文件读写) “ab+”(读写)

    1.2 用fclose函数关闭数据文件

    fclose函数调用的一般形式为 fclose(文件指针);

    二、顺序读写数据文件

    2.1 向文件读写字符
    函数名调用形式返回值
    fgetcfgetc(fp)读成功,带回所读的字符,失败则返回文件结束标志EOF(即-1)
    fputcfputc(ch,fp)输出成功,返回值就是输出的字符;输出失败,则返回EOF(即-1)
    2.2 向文件读写字符串
    函数名调用形式返回值
    fgetsfgets(str,n,fp)读成功,返回地址str,失败则返回NULL
    fputsfputs(str,fp)输出成功,返回0;否则返回非0值

    例:
    char str[10];
    fgets(str, 10, fp); //从fp指向的文件读入一个长度为9的字符串,并添加结束符‘\0’,存放到字符数组str中

    2.3 用格式化的方式读写文件

    fprintf(文件指针,格式字符串,输出表列)
    fscanf(文件指针,格式字符串,输入表列)
    例如:
    fprintf( fp, “%d,%6.2f”, i, f); //返回值:失败则返回EOF
    fscanf( fp, “%d,%f”, &i, &f);

    2.4 用二进制方式向文件读写一组数据

    fread( buff, size, count, fp); //返回值:成功则返回count的值
    fwrite( buff, size, count, fp);
    例如:
    fread( f, 4, 10, fp); //从fp所指向的文件读入10个4个字节的数据,存储到数组f中

    三、随机读写数据文件

    3.1 文件位置标记的定位

    (1) 用rewind函数使文件位置标记指向文件开头:rewind(fp)
    (2) 用fseek函数改变文件位置标记:fseek(文件类型指针,位移量,起始点)

    起始点名字用数字代表
    文件开始位置SEEK_SET0
    文件当前位置SEEK_CUR1
    文件末尾位置SEEK_END2

    fseek函数调用例子:

    函数调用作用
    fseek(fp, 100L, 0);将文件位置标记向前移到离文件开头100个字节处
    fseek(fp, 50L, 1);将文件位置标记向前移到离当前位置50个字节处
    fseek(fp, -10L, 2);将文件位置标记从文件末尾处向后退10个字节
    展开全文
  • C++学习:在C++中的文件输入文件输出

    万次阅读 多人点赞 2017-07-07 22:46:12
    C++学习:在C++中的文件输入文件输出简介: 在C语言中,我们有fread和fwrite用于文件的输入和输出,在java中我们也有inputStream和outPutStream输入输出流,在C++语言中,同样为我们封装了自己的输入ifstream,输出流...

    C++学习:在C++中的文件输入和文件输出


    简介:
    在C语言中,我们有fread和fwrite用于文件的输入和输出,在java中我们也有inputStream和outPutStream输入输出流,在C++语言中,同样为我们封装了自己的输入ifstream,输出流ofstream,当然C++是面向对象的,所以调用的方式上可能跟C有点点小小的区别
    ifstream和ofstream都是fstream的子类


    提示:

    博主:章飞_906285288
    博客地址:http://blog.csdn.net/qq_29924041


    简单介绍下文件io流下的一些相关函数

    文件打开方式属性

    属性作用
    ios::in供读,文件不存在则创建(ifstream默认的打开方 式)
    ios::out供写,文件不存在则创 建,若文件已存在则清空原内容(ofstream默认的打开方式)
    ios::ate文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用
    ios::app供写,文件不存在则创建,若文件已存在则在原文件内容后写入 新的内容,指针位置总在最后
    ios::trunc在读写前先将文件长度截断为0(默认)
    ios::nocreate文件不存在时产生错误,常和in或app联合使用
    ios::noreplace文件存在时产生错误,常和out联合使用
    ios::binary二进制格式文件

    文件保护方式选择项:

    属性作用
    filebuf::openprot默认的兼容共享方式
    filebuf::sh_none独占,不共享
    filebuf::sh_read读共享
    filebuf::sh_write写共享

    文件流的打开方式

    ifstream f("a.txt", ios::nocreate);         //默认以 ios::in 的方式打开文件,文件不存在时操作失败  
    ofstream f("a.txt");                //默认以 ios::out的方式打开文件  
    fstream  f("a.dat", ios::in|ios::out|ios::binary); //以读 写方式打开二进制文件 

    文件的关闭

    ifstream file("a.txt");
    fi.close(); //使用完毕之后需要关闭

    文件打开成功的判断

    1:直接使用返回流来进行判断      
    ifstream file("a.txt",ios::out);
    if(file){
        //
    }
    2:使用good函数来进行判断,或者也可以用来判断写的东西是否正确
    if(file.good()){
        //打开成功的判断
    }
    如:good()是没有任何类型检查的
    while(file.good()){
        cin >> num;
    }
    3:可以使用is_open()来判断是否打开
     file.open("a.txt");
     if(file.is_open()){
         //打开成功
     }  
    当然如果判断打开失败,则可以用!来表示
    

    判断读取到文件的尾部EOF,使用函数eof()

    伪代码:

        instream infile("a.txt");
        if(infile){
            while(!infile.eof()){
                //如果没有读取到文件文件尾部
            }
        }

    文件io流的读写操作:

    1:字符输入输出
        使用>>和<<来进行读写操作,只能来进行文本操作,读取二进制可能会出错
    2:字节输入:
        使用write和read函数来进行读写操作
    

    文件io流来获取读写的字节数

    getcount()函数,返回的就是读写的字节数
    

    随机进行文件的读写操作
    随机读写函数:

    seekg(绝对位置);      //绝对移动,    //输入流操作  
    seekg(相对位置,参照位置);  //相对操作  
    tellg();          //返回当前指针位置  
    seekp(绝对位置);      //绝对移动,    //输出流操作  
    seekp(相对位置,参照位置);  //相对操作     
    tellp();          //返回当前指针位置  

    随机读写的标志位:

    属性作用
    fios::beg相对于文件头
    ios::cur相对于当前位置
    ios::end相对于文件尾

    重要提示:

    因为文件输入输出也是属于io流中的,所以适用于cout和cin的属性设置的,对文件流来所也是适用的,具体的可以参考C++IO流的api


    C++中简单的输出流

    执行步骤:
    1. 必须包含头文件fstream
    2. 头文件fstream定义了一个用于处理输出的ofstream
    3. 需要声明一个或者多个ofstream对象,并以自己喜欢的方式对其进行命名,条件是遵守常用命名规则
    4. 必须指明命名空间std,例如:为引用元素ofstream,必须使用变异指令using或者前缀std::;
    5. 必须将ofstream对象与文件进行关联起来,为此方法之一就是open()方法
    6. 使用完毕文件之后需要将其关闭,使用close()方法
    7. 可以结合使用ofstream对象和操作符来输出各种文件类型的数据
    注意:
    虽然头文件中提供了预先定义好的cout的ostream对象,但是也必须要声明自己的ofstream对象,并且为其命名.并且将同文件关联起来
    声明一个对象关联起来,便可以像cout一样使用它,所有可用于cout的操作方法( << ,endl,setf())都是可以用于ofstream对象的

    记住创建好outFile之后,就可以像cout一样去使用它了

    示例代码:

    /*
     * ===========================================================================
     *
     *       Filename:  ofsteam.cpp
     *    Description:  
     *        Version:  1.0
     *        Created:  2017年07月06日 22时31分24秒
     *       Revision:  none
     *       Compiler:  gcc
     *         Author:   (), 
     *        Company:  
     *
     * ===========================================================================
     */
    
    #include<iostream>
    #include<fstream>
    using namespace::std;
    
    
    int main(int agrc,char* argv[]){
      ofstream outFile;
      char automobile[50];
      int year;
      double a_price;
      double b_price;
    
      //创建并且打开文件(没有则创建,有则覆盖)
      outFile.open("carinfo.txt",ios::out);
      cout << "Enter the make and model of automobile;";
      cin.getline(automobile,50);
      cout <<"Enter the model year:";
      cin >> year;
      cout << "Enter the origin asking price:";
      cin >> a_price;
    
      b_price = 0.913 * a_price;
    
      cout << fixed;
      cout.precision(2);//保留两位小数点
      cout.setf(ios_base::showpoint); //设置展现小数点
      cout << "make the model:" <<automobile <<endl;
      cout <<"Year:"<<year;
      cout <<"a_price:"<<a_price<<endl;
      cout <<"b_price:"<<b_price<<endl;
    
    
      //打开成功 也可以适用outFile.good()
      if(outFile){
        outFile.precision(2); //向设置cout一样设置保留位数
        outFile << fixed; //一般的方式输出浮点数
        outFile.setf(ios_base::showpoint);//展示小数点
    
        outFile << "make the model:"<<automobile <<endl; //使用<<将文本输入到文件中去
        outFile <<"year:"<<year<<endl;
        outFile <<"a_price:"<<a_price<<endl;
        outFile <<"b_price" <<b_price<<endl;
    
      }
    
      //关闭文本文件输出流
      outFile.close();
    
      return 0;
    }

     
     具体的结果就不在这里进行输出,有兴趣的copy执行,代码取自C++primer


    C++中简单的输入流

    执行步骤:

    1. 必须包含头文件fstream
    2. 头文件fstream定义了一个用处理输出的ifstream类
    3. 需要声明一个或者多个ifstream变量对象,并且以自己喜欢的方式对其命名,条件是遵守常用的命名规则
    4. 必须指明命名空间std
    5. 需要将ifstream对象与文件关联起来,方法之一就是open()
    6. 使用完毕之后,应使用close()方法将其关闭
    7. 可以结合使用ifstream对象和操作符<<来读取各种数据类型的数据
    8. 可以使用ifstream对象和get方法来读取一个字符,使用ifstream对象和getline来读取一行字符
    9. 可以结合使用ifstream和eof()检查文件是否到尾部,fail()检查是否类型不匹配等方法来判断输入是否成功
    10. ifstream对象本身被用作测试条件的时候,如果最后一个读取操作成功,他将被转换成布尔值true,否则为false

      注意:

    1:虽然头文件iostream中提供了一个预定义好的名为cin和istream对象,但是必须声明自己的ifstream对象,为其命名,并且将其与文件关联起来
    2:方法open()接受一个C风格字符串做为参数,还可以是一个字面字符串,也可以是存储在数组中的字符串
    3:与文件关联起来后,能够使用在cin上的操作,都可以使用在ifstream的对象上
    4:使用is_open()判断检查文件是否打开了,太老的编译器可能不支持

    inFile.open("a.txt");
    if(!inFile.is_open()){
        exit(1);
    }
    

    5:论文件打开的重要性:

    打开失败的原因
    1:指定文件不存在
    2:文件目录错误
    3:用户输错了文件名字
    4:访问被拒绝(访问权限问题)
    

    6:读取文件的时候有几点需要检查的地方:

    1:程序读取文件的时候不应该超过EOF(文件结尾的符号),如果读到EOF或者eof()为true
    2:程序可能遇到一些读取类型不匹配的情况
    3:某些预期之外的东西,如文件受损或硬件故障等.
    

    示例代码

    /*
     * ===========================================================================
     *
     *       Filename:  ifstream.cpp
     *    Description:  
     *        Version:  1.0
     *        Created:  2017年07月07日 21时48分41秒
     *       Revision:  none
     *       Compiler:  gcc
     *         Author:   (), 
     *        Company:  
     *
     * ===========================================================================
     */
    
    #include<iostream>
    #include<fstream>
    #include<stdlib.h>
    using namespace::std;
    
    const int SIZE = 50;
    
    int main(int argc,char* argv[]){
      ifstream inFile;
      char content[50];
      /*inFile.open("carinfo.txt",ios::in);
      if(inFile.is_open()){
        while(!inFile.eof()){
          inFile.getline(content,50);
          cout << content << endl;
        }
      }*/
    
      char fileName[SIZE];
      cout << "Enter a name of File:";
      cin.getline(fileName,SIZE);
      inFile.open(fileName,ios::in);/*打开文件*/
      if(!inFile.is_open()){
         cout<<"open file is error"<< endl;
         exit(1);
      }
    
      while(inFile.good()){
        inFile.getline(content,50);
        cout << content << endl;
      }
      if(inFile.eof()){/*判断是否到了文件尾部*/
        cout << "End of File reached"<< endl;
      }else if(inFile.fail()){/*判断是否是类型不匹配或者磁盘错误*/
        cout << "Input by Data mismatched" <<endl;
      }else {/*未知错误*/
        cout << "unknow reason" <<endl;
      }
    
      inFile.close();/*关闭文件*/
    
      return 0;
    }

    结合文件输入和输出写的一个文件拷贝工具类

    /*
     * ===========================================================================
     *
     *       Filename:  copyTest.cpp
     *    Description:  
     *        Version:  1.0
     *        Created:  2017年07月07日 22时07分41秒
     *       Revision:  none
     *       Compiler:  gcc
     *         Author:   (), 
     *        Company:  
     *
     * ===========================================================================
     */
    
    #include<iostream>
    #include<fstream>
    #include<string.h>
    #include<stdlib.h>
    using namespace::std;
    
    const int SIZE = 50;
    
    int main(int argc,char* argv[]){
      ifstream inFile;
      ofstream outFile;
      char inFileName[SIZE];
      char outFileName[SIZE];
    
      char buffer;
      char buffer2[20];
    
      cout << "Enter a src file name:";
      cin.getline(inFileName,SIZE);
      cout << "Enter a des file name:";
      cin.getline(outFileName,SIZE);
    
      inFile.open(inFileName,ios::in | ios::binary);
      if(!inFile.is_open()){
          cout << "open src file error"<<endl;
          inFile.close();
          exit(1);
      }
      outFile.open(outFileName,ios::out | ios::binary);
      if(!outFile.is_open()){
        cout <<"open des file error"<<endl;
        inFile.close(); //注意在return的时候将流关闭
        outFile.close();
        exit(1);
      }
      int num;
      while(inFile.good()){
        inFile.read(buffer2,sizeof(buffer2));
        num = inFile.gcount();//获取读取的字节
        outFile.write(buffer2,num);
    
        //inFile.get(buffer);//读取字符流
        //outFile << buffer;//将字符流写入
      }
      if(inFile.eof()){
        cout << "end of input"<< endl;
      }else if(inFile.fail()){
        cout << "dismatched"<<endl;
      }else {
        cout <<"unknow"<<endl;
      }
    
      inFile.close();
      outFile.close();
      return 0;
    }
    展开全文
  • C语言 文件输入输出

    千次阅读 2019-07-31 15:37:51
    C语言程序在进行文件操作时遵循如下操作步骤: 打开->读写操作->关闭,通俗地说,打开是获取文件结构、系统为文件分配缓冲区的过程,不打开文件就不能对...stdin:标准输入文件指针,系统分配为键盘。 stdou...
  • C++之文件输入输出

    万次阅读 2018-07-20 14:48:56
    2.文件输出: 1.流状态: 在c++中我们易知的是cout和cin俩个标准输入输出,而在真实的状况中。我们则是需要对文件的内容进行读取和重新写入,这样我们只有cin和cout这俩个标准输入和输出就明显的不够满足条件...
  • 文件输入流和输出流详解

    千次阅读 2018-06-24 14:30:38
    按照流向划分为输入流和输出输入流:就是以程序为中心点,硬盘上的文件内容流入到程序中可以存储数据的东西中比如说数组,用read方法 输出流:就是以程序为中心点,程序中的数组或者其他的可以存储数据的东西中...
  • 文件文件输入输出

    万次阅读 2018-08-23 16:09:14
    2. 数据文件文件的内容不是程序,而是供程序运行时读写的数据,包括在程序运行过程中输出到磁盘的数据和在程序运行过程中供读入的数据,如全班学生的成绩数据、货物交易的数据。 我们主要讨论的是数据文件,.....
  • C++输入输出文件

    千次阅读 2020-02-12 20:40:38
    一、C++输入输出 I/O 库头文件 下列的头文件在 C++ 编程中很重要。 标准输出流(cout) 预定义的对象 cout 是 iostream 类的一个实例。cout 对象“连接”到标准输出设备,通常是显示屏。cout 是与流插入运算符 <...
  • C/C++文件输入输出(详细介绍)

    万次阅读 多人点赞 2018-10-28 09:39:20
    ´在头文件iostream中定义有两个流类:输入流类istream和输出流类ostream,且用这两个类定义了流对象cin和cout: ´Istream cin; ´ostream cout; ´cin是一个istream类的对象,它从标准输入设备(键盘)获取数据,...
  • c语言基础——对文件输入输出(详细版)

    万次阅读 多人点赞 2019-08-11 22:38:10
    1.程序文件包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为exe)。这种文件的内容是程序代码 2.数据文件的内容不是程序,而是供程序运行时读写的数据。其根据数据的组织形式可分为文本文.....
  • C++ 流 文件操作(输入输出流)

    万次阅读 多人点赞 2018-09-26 20:37:15
    到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。 本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它...
  • c语言文件输入输出

    万次阅读 2017-09-30 11:28:41
    重定向的方法写起来简单、自然,但是不能同时读写文件和标准输入输出;fopen的写法稍有繁琐,但是灵活性比较大(例如可以重复打开并读写文件)。如果想把fopen版的程序改成读写标准输入输出,只需要赋值“fin=stdin;...
  • 目录目录 前言 文件IO 文件流类和文件流对象 C普通文件输入输出操作 C二进制文件输入输出操作 ...文件I/O文件输入流:ifstream 文件输出流:ofstream 文件输入输出流:fstream 这些就表示要使用文件输入
  • MATLAB 输入输出文件

    千次阅读 2014-06-23 17:13:22
    输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。 1、文件的打开与关闭 1)打开文件 在读写文件之前,必须先用fopen函数打开或创建文件,并指定对...
  • 文件流类和文件流对象文件流是以外存文件输入输出对象的数据流。输出文件流 内存-&gt;外存输入文件流 外存-&gt;内存 文件流类流的名称 流的作用 ifstream类 从istream类派生的,用来支持从磁盘文件的...
  • 注意输入输出文件必须和程序放在同一个文件目录中 #include<iostream> #include<cstdlib>//需添加此文件头 using namespace std; int main() { int a,b; freopen("mid.in","r",stdin);//从mid.in文件...
  • C++中简单的文本文件输入/输出

    万次阅读 多人点赞 2017-10-25 22:23:46
    为了便于理解,我们把cout 用于控制台输出时的一些情况和写入到文本文件的情况进行类比:cout 控制台输出 包含头文件 iostream 头文件 iostream 定义了一个 ostream 类用于...文本文件输出(写入到文本文件) 包含文
  • C++ 输入输出流和文件输入输出

    千次阅读 2017-09-06 11:41:13
    输出到文件#include #include using namespace std; int i = 100; ofstream file("1.txt"); //文件输出对象,文件名绑定int main() { cout ; //输出到屏幕 file ; //输出到
  • C++文件输入输出流及标准I/O流类知识总结

    万次阅读 多人点赞 2018-10-13 23:42:06
    在学习使用C++进行STL模型文件的读写与显示时,遇到了一些文件读取的问题...C++所有的输入输出流(I/O)都是基于stream流类,包括iostream,fstream,stringstream,其对象称为流对象,其之间的相互关系如下: ...
  • Java - 文件输入输出 简单方法

    万次阅读 多人点赞 2018-07-10 21:08:39
    java.io.PrintWriter类可用来创建一个文件并向文本文件写入数据。 首先创建一个PrintWriter对象,如下所示: PrintWriter output = newPrintWriter(filename); //若不存在则创建一个新文件 然后,可以调用 ...
  • 常用文件输入输出符号格式及标准 常用应用对象为文件的库函数简介: 库函数部分: 文件创建、打开、阅读: 数据块写入读出(只有这两个函数可以对二进制文件进行数据操作): 字符及字符串写入读出: 格式化...
  • C/C++对文件的基本输入输出

    万次阅读 多人点赞 2018-08-08 20:15:24
    C语言文件输入输出 1. 打开文本基本格式: FILE *变量名=fopen(“文件名”, ”打开方式”); 如:FILE *fp=fopen(“test.txt”, ”r”); 可以理解为生成了一个FILE类型的指针变量fp,指向了以只读方式打开的文件...
  • 当在Linux系统中打开一个文件时,标准输入、标准输出、标准错误输出是默认打开的 指定重定向 文件file_redirect、file_stdout(必须是已经存在的) 为了验证是否实验成功可以事先在文件中写入一句话:Successful ...
  • C/C++文件操作——输入输出

    千次阅读 多人点赞 2018-07-03 14:35:35
    一、输入输出流相关类 如下图所示: ios_base是ios类的基类,分别派生出 istream 和 ostream 两个输入输出类, iostream 类又继承了 istream 和 ostream 的输入输出,成为包括 istream 和 ostream 的输入输出类...
  • R:写文件(输入输出)

    万次阅读 2018-05-03 12:25:00
    Write.table()函数的用法read.table()非常相似,只不过它把数据框写入文件而不是从文件中读取。参数和选项:write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",...
  • C语言关于文件输入输出

    千次阅读 2018-05-21 19:18:29
    C语言的文件可以帮助我们可以在不用每次运行程序时都要进行重新输入数据,可以帮我们进行数据的存储(类似数据库,但又没那么高大上),但学会文件可以我们编程更加的方便,不用再一次次的输入数据。文件方面一般...
  • C语言文件输入/输出

    千次阅读 2016-08-27 13:05:24
    文件输入/输出学习是C语言中的一块重要内容,因为当你的程序变得复杂时,难免要处理一些文件,涉及到文件的读取和写入。C语言提供了强大的文件输入/输出功能,其标准I/O包中包含了很多专用的函数,可以很方便地...
  • 之前通过a标签的href属性下载文件,但图片会直接在浏览器打开,在网上找了好久找到一个能用的,在此备份下。 java方法: public static void download(HttpServletRequest request, HttpServletResponse ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,753,487
精华内容 701,394
关键字:

文件的输出输入等