c/c++ 按照行读取文件
本文代码都在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++ 按照行读取文件的更多相关文章
- C++/Php/Python/Shell 程序按行读取文件或者控制台
写程序经常需要用到从文件或者标准输入中按行读取信息,这里汇总一下.方便使用 1. C++ 读取文件 #include<stdio.h> #include<string.h> i ...
- Python跳过第一行读取文件内容
Python编程时,经常需要跳过第一行读取文件内容.比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作.相应的Python代码如下: inpu ...
- python_基础学习_01_按行读取文件的最优方法
python 按行读取文件 ,网上搜集有N种方法,效率有区别,先mark最优答案,下次补充测试数据 with open('filename') as file: for line in file: d ...
- Java利用内存映射文件实现按行读取文件
我们知道内存映射文件读取是各种读取方式中速度最快的,但是内存映射文件读取的API里没有提供按行读取的方法,需要自己实现.下面就是我利用内存映射文件实现按行读取文件的方法,如有错误之处请指出,或者有更好 ...
- python 按每行读取文件怎么去掉换行符
python按每行读取文件后,会在每行末尾带上换行符,这样非常不方便后续业务处理逻辑,需要去掉每行的换行符,怎么去掉呢?看下面的案例: >>> a = "hello wor ...
- Shell按行读取文件的3种方法
Shell按行读取文件的方法有很多,常见的三种方法如下: 要读取的文件: [root@mini05 -]# cat file.info 写法一: [root@mini05 -]# cat read1. ...
- Python按行读取文件、写文件
Python按行读取文件 学习了:https://www.cnblogs.com/scse11061160/p/5605190.html file = open("sample.txt&qu ...
- shell脚本,按行读取文件的几种方法。
第一种方法用while实现按读取文件.[root@localhost wyb]# cat a.txt 第一行 aaaaaa 第二行 bbbbbb 第三行 cccccc 第四行 dddddd 第五行 e ...
- C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结。
C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结. 一.总结 C++/Php/Python/Shell 程序按行读取文件或者控制台(php读取标准输入:$fp = fope ...
- C++ 按行读取文件并打印
#include<iostream> #include<fstream> #include<string> #include <vector> #inc ...
随机推荐
- 我理解的Future模式
学而时习之,不亦说乎! --<论语> 什么是Future? 考虑一个场景,为了完成某个业务,我需要同时查询三张表的三条独立数据.但 ...
- sqlserver 并发机制
一.事务四大属性 分别是原子性.一致性.隔离性.持久性. 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库, ...
- 【TensorFlow】-精选Github开源项目
转至:http://www.matools.com/blog/1801988 留底做个记录,有空在做验证. TensorFlow源码 https://github.com/tensorflow/ten ...
- XML 十六进制值 是无效的字符错误 解决方法之一 转
/// <summary> /// 过滤非打印字符 /// </summary> /// <param name="tmp">待过滤</p ...
- [原]SuperMap GIS(JavaScript) 拉框放大和缩小功能实现
版权声明:本文为博主原创文章,未经博主允许不得转载. var ZoomControl; /* * 拉框缩小 */ function ZoomOut(){ if(ZoomControl==null||Z ...
- Oracle 数据库、表、方案的逻辑备份与恢复
数据库(表)的逻辑备份与恢复 逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被破坏而使用工具import利用备份的文件把数据对象导入到数据库的过程,逻 ...
- 转 shell中$(( )) 与 $( ) 还有${ }的区别
原文 http://blog.zol.com.cn/2322/article_2321763.html $( ) 与 ` ` (反引号)在 bash shell 中,$( ) 与 ` ` (反引号) ...
- 9.1_the end
选择题 1.考察正则,书写一个6位数的邮箱 a var mail=/\d{6}/; b var mail=new RegExp("/\d{6}/"); 分析:对a,应该要添加开头和 ...
- Windows加密服务架构
Windows加密是安全体系的重要基础和组成部分.现代CPU的保护模式是系统安全的硬件基石,基于CPU硬件的特权分级,Windows让自身的关键系统代码运行在高处理器特权级的内核模式,各种应用程序则运 ...
- Xcode日常使用
1.构建输出目录(Preferences->Locations->Locations)当选择为Default时,Derived Data的目录为~/Library/Developer/Xc ...