本文代码都在Windows/VC++6.0下测试过, 在linux/g++下也没有问题。

但是请一定注意linux和Windows文件格式的区别,比如:

1. 当linux上的代码读取Windows文件格式时, 读取结果的每行都会多一个\r,  想想为什么。

2. 当Windows上的代码读取linux格式文件时, 读取的结果会显示只有一行, 想想为什么。

先用C语言写一个丑陋的程序:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp;
    if(NULL == (fp = fopen("1.txt", "r")))
    {
        printf("error\n");
        exit(1);
    }
 
    char ch;
    while(EOF != (ch=fgetc(fp)))
    {
        printf("%c", ch);
    }
 
    fclose(fp);
 
    return 0;
}
     你只能看到结果,却没法利用每一行。 我们来改为:

// VC++6.0
 
#include <stdio.h>
#include <string.h>
 
int main()
{
    char szTest[1000] = {0};
    int len = 0;
 
    FILE *fp = fopen("1.txt", "r");
    if(NULL == fp)
    {
        printf("failed to open dos.txt\n");
        return 1;
    }
 
    while(!feof(fp))
    {
        memset(szTest, 0, sizeof(szTest));
        fgets(szTest, sizeof(szTest) - 1, fp); // 包含了换行符
        printf("%s", szTest);
    }
 
    fclose(fp);
 
    printf("\n");
 
    return 0;
}
      这样, 我们就是整行读取了。

感觉C的读取方法有点丑陋,还是看看C++吧(只要文件格式Windows/linux和编译平台Windows/linux对应一致, 就放心用吧):

#include <fstream>
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    ifstream in("1.txt");
    string filename;
    string line;
 
    if(in) // 有该文件
    {
        while (getline (in, line)) // line中不包括每行的换行符
        { 
            cout << line << endl;
        }
    }
    else // 没有该文件
    {
        cout <<"no such file" << endl;
    }
 
    return 0;
}
     当然,你可以对上述程序进行修改,让1.txt中的每一行输入到2.txt中,如下:

#include <fstream>
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    ifstream in("1.txt");
    ofstream out("2.txt");
    string filename;
    string line;
 
    if(in) // 有该文件
    {
        while (getline (in, line)) // line中不包括每行的换行符
        { 
            cout << line << endl;
            out << line << endl; // 输入到2.txt中
        }
    }
    else // 没有该文件
    {
        cout <<"no such file" << endl;
    }
 
    return 0;
}
      结果, 2.txt和1.txt中的内容完全一致,你可以用Beyond Compare比较一下,我比较过了。

看来上述程序还能实现文件的复制呢,如下:

#include <fstream>
#include <string>
#include <iostream>
using namespace std;
 
void fileCopy(char *file1, char *file2)
{
    // 最好对file1和file2进行判断
    
    ifstream in(file1);
    ofstream out(file2);
    string filename;
    string line;
 
    while (getline (in, line))
    { 
        out << line << endl;
    }
}
 
int main()
{
    fileCopy("1.txt", "2.txt");
    return 0;
}
     当然了,上述程序只能针对文本文件(不仅仅是.txt),对其它类型的文件,不适合。

C/C++ 按行读取文件相关推荐

  1. Python按行读取文件、写文件

    Python按行读取文件 学习了:https://www.cnblogs.com/scse11061160/p/5605190.html file = open("sample.txt&qu ...

  2. C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结。

    C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结. 一.总结 C++/Php/Python/Shell 程序按行读取文件或者控制台(php读取标准输入:$fp = fope ...

  3. python读取大文件的某行_Python按行读取文件的实现方法【小文件和大文件读取】...

    本文实例讲述了Python按行读取文件的实现方法.分享给大家供大家参考,具体如下: 小文件: #coding=utf-8 #author: walker #date: 2013-12-30 #func ...

  4. Shell按行读取文件的3种方法

    Shell按行读取文件的方法有很多,常见的三种方法如下: 要读取的文件: 1 [root@mini05 20180930-2]# cat file.info 2 111 3 222 4 333 444 ...

  5. python按行读取文件效率高吗_Python按行读取文件的实现方法【小文件和大文件读取】...

    本文实例讲述了Python按行读取文件的实现方法.分享给大家供大家参考,具体如下: 小文件: #coding=utf-8 #author: walker #date: 2013-12-30 #func ...

  6. 文件------概念、基本操作、打开文件的方式、按行读取文件内容、复制文件、文件/目录的常用管理操作、文本文件的编码格式、练习1-4

    文件的概念 文件的概念 计算机的文件,就是存储在某种长期储存设备上的一段数据 长期存储设备包括:硬盘.U盘.移动硬盘.光盘... 文件的作用 将数据长期保存下来,在需要的时候使用 文件的存储方式 在计 ...

  7. python按行读字符串,python按行读取文件并找出其中指定字符串

    python怎么提取出文件里的指定内容 python读取文件内容的方法: 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = open('thefile ...

  8. Python readline()和readlines()函数:按行读取文件

    Python readline()和readlines()函数:按行读取文件 前面章节中讲到,如果想读取用 open() 函数打开的文件中的内容,除了可以使用 read() 函数,还可以使用 read ...

  9. Python3跳过第一行读取文件

    在读取文件的时候,我们很多时候并不需要文件头的注释信息(即第一行),通过判断其是否是第一行来读取在读取大文件时很费劲(每读取一行判断一次). 下面是我跳过第一行的方法总结 打开文件后f.readlin ...

  10. python 替换换行符_python按行读取文件,如何去掉换行符\\n

    展开全部 python按行读取文件直接使用for in open方式即可,去除'\n',可以使用两种方法,一种是替换函数:replace('\n','')把换行符替换成空;一种是去e68a843231 ...

最新文章

  1. 记一次@ResponseBody注解不生效问题
  2. nmealib解析-----(1)
  3. 基于mpi的奇偶排序_基于MPI的PSRS并行排序算法的实现
  4. python xy不在第一维度_ValueError:x和y必须具有相同的第一个维度ipython 3.5
  5. 蚂蚁S9矿卡ddr型号确认方法
  6. 【JAVA程序设计】从HelloWorld开始
  7. WPF 重定向DLL stdout
  8. JavaScript:indexOf()方法
  9. 御剑仙侠服务器维护,御剑修仙放置挂机文字游戏
  10. 局域网共享工具_还在用数据线?快来试试网页版局域网共享工具!
  11. ios dat 文件读写_玩转你的iphone, IOS 13 NFC标签读写详细步骤
  12. 重新安装OFFICE2010失败
  13. Faster-rcnn 源码学习(二)
  14. Web安全基础一漏洞产生原理漏洞探测(持续更新)
  15. vue打印插件的使用
  16. endnote导入知网文献
  17. Ubuntu下安装UE和AirSim并使用UE4.27编译C++项目
  18. 用小米平板,如何看小度路由器所连接的移动硬盘上的视频
  19. 2022年索尼A7R4A与A7R3A如何选择?
  20. android amr转wav 代码,amr转wav java代码

热门文章

  1. P1616 疯狂的采药(python3实现)--80分
  2. 理性派:数学写真集系列书籍等
  3. /* program p5_04_AC 《聪明人的游戏提高篇》 1307:【例1.3】高精度乘法
  4. thinkphp js带参数跳转页面
  5. 信息安全工程师笔记-入侵检测技术原理与应用
  6. Qt文档阅读笔记-QWebView官方解析与实例
  7. 初识Java中注解的分类
  8. MySQL入门之创建、修改、删除、查看数据库
  9. netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译
  10. flutter usb串口_Flutter 调试方式