您的位置:首页 > 编程语言 > C语言/C++

如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)

2017-12-05 15:40 866 查看
 原文地址:  http://blog.csdn.net/stpeace/article/details/12404925


如下代码均在Windows/VC++6.0下测试通过, 请一定注意linux和Windows文件格式的区别







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

[cpp]
view plain
copy

#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;  
}  

     你只能看到结果,却没法利用每一行。 我们来改为:

[cpp]
view plain
copy

// 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); // 包含了\n  
        printf("%s", szTest);  
    }  
  
    fclose(fp);  
  
    printf("\n");  
  
    return 0;  
}  

      这样, 我们就是整行读取了。

      感觉C的读取方法有点丑陋,还是看看C++吧:

[cpp]
view plain
copy

#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中,如下:

[cpp]
view plain
copy

#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比较一下,我比较过了。

 

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

[cpp]
view plain
copy

#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),对其它类型的文件,不适合。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐