本文代码都在Windows/VC++6.0下测试过, 在linux/g++下也没有问题。 linux
可是
请必定注意linux和Windows文件格式的区别,好比:ios
1. 当linux上的代码读取Windows文件格式时, 读取结果的每行都会多一个\r, 想一想为何。测试
2. 当Windows上的代码读取linux格式文件时, 读取的结果会显示只有一行, 想一想为何。spa
先用C语言写一个丑陋的程序:ip
- #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;
- }
你只能看到结果,却无法利用每一行。 咱们来改成:get
-
- #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;
- }
这样, 咱们就是整行读取了。
string
感受C的读取方法有点丑陋,仍是看看C++吧(只要文件格式Windows/linux和编译平台Windows/linux对应一致, 就放心用吧):it
- #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))
- {
- cout << line << endl;
- }
- }
- else
- {
- cout <<"no such file" << endl;
- }
-
- return 0;
- }
固然,你能够对上述程序进行修改,让1.txt中的每一行输入到2.txt中,以下:io
- #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))
- {
- cout << line << endl;
- out << line << endl;
- }
- }
- 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)
- {
-
-
- 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),对其它类型的文件,不适合