日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++ 按行读取文件

發布時間:2025/3/15 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++ 按行读取文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。