首先還是先完整的學習一下文件打的所有方式。
文件的打開方式是由,w,a,t,b,+,六個字元組成。如下:
「r」 只讀打開文件,如果文件不存在,返回一個錯誤.
「r+」 可讀寫打開文件,如果文件不存在,返回錯誤.
「w」 只寫打開文件,如果文件不存在,則創建一個新的文件,如果已經存在,將裡面的內容清空.
「w+」 可讀寫打開文件,如果文件不存在,創建新文件,如果已經存在,清空文件中的內容.
「a」 以追加寫入的方式打開文件(在文件未尾追加寫入數據) ,如果文件不存在,創建新文件.
「a+」 以可讀取並且可追加寫入的方式打開文件,如果不存在,創建新文件.
如果要指定打開文本文件,則在打開方式中加入』 t 『 字元.如果是二進制文件,則加入』 b 『 字元. 如下:
1
"rt" "rt+" "r+t" "rb" "rb+" "r+b"
當以追加方式打開文件時,文件的數據偏移指針會指向文件的最未尾,如果此時從文件讀入數據,可能會失敗,都已經文件未尾了,還有什麼數據要讀的?所以追加方式打開時,不要第一時間讀入數據.
注意: 如果想打開文件後,先讀取數據,然後再寫入,請不要用」w+」的方式,因為」w」方式會把已存在的文件的數據清空,所以會發生讀取錯誤.
基於上面介紹,我們這章要從一個文本文件中讀取數據,所以使用下面代碼打開文件:
1
2
3
4
FILE * fptr;
fptr = fopen( FILE_NAME , "rt" );
.....
fclose( fptr );
讀取文件的函數原型如下:
1
2
int fgetc( FILE* fstream);
char* fgets( char* buf , int n , FILE* fstream);
fgetc() 返回讀到的字元的ASCII碼.
在fgets()中,buf參數用來指定一個字元串指針來接收讀到的數據,參數n用來指定讀入的最大字元數.
fgets() 返回讀到的字元串指針.如果錯誤,返回NULL.
並且,我們可以用feof()函數來判斷是否已經讀到了文件的未尾.
1
int feof( FILE* fstream);
如果已經讀到文件未尾,feof()返回非0值(也就是TRUE值),如果沒有,返回0(FALSE);
學完了上面,我們現在准備一個data.txt文件,內容可以,也可以你喜歡的任何內容:
1
2
3
1234567890
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
請把data.txt文件與程序一起放在同一個文件夾,否則會有打開data.txt文件錯誤
然後編寫一個程序,代碼如下:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
本程序中涉及到的fputc() 和 fputs()函數在上一章已經作了介紹,可自行查閱.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "data.txt" //文件名
#define BUFSIZE 27 //緩存的大小為27位元組
int main( int argc , char* argv[])
{
FILE *fptr;
char buf[BUFSIZE];
char ch;
fptr = fopen( FILENAME , "r+t");
if ( fptr == NULL )
{
puts( "open file error");
exit(1);
}
do{
ch = fgetc( fptr);
fputc(ch , stdout);
}while( ch != 'n' );//如果讀到換行符,就退出循環.
while( ! feof( fptr) ){//如果讀到文件未尾,就退出循環.
memset ( buf , 0 , BUFSIZE);
fgets( buf , BUFSIZE -1 , fptr );
//之所以要限制讀入的數據長度為BUFSIZE-1,因為buf字元串的最後一個字元必須為'',防止被讀入的數據覆蓋.
fputs( buf , stdout);
}
fclose( fptr);
getchar();//程序暫停,按下回車鍵後繼續
return 0 ;
}
把代碼復制到編譯環境中編譯後,把執行程序放在與data.txt相同的文件夾,然後運行,就會看到效果了.
『貳』 c語言怎麼讀取文件內容並且計算
主要通過fscanf,fprintf格式化輸入輸出函數實現,主要代碼如下,
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *pf=NULL;
char name[20];//存儲用戶名
float salary=0;//存儲工資
pf=fopen("test.txt", "r+" );//test.txt文件中內容為kobe 90000.80
if(!pf)
{
printf("打開文件失敗,程序退出!");
exit(1);
}
fscanf(pf,"%s %f",name,&salary);
salary*=0.9;//處理工資,例如扣除五險、扣稅等。
fprintf(pf,"\n%f",salary);//寫入test.txt文件中
printf("%s %f\n",name,salary);//輸出kobe 81000.718750
if(pf)//關閉文件
{
fclose( pf);
pf=NULL;
}
return 0;
}
int fscanf( FILE *stream, const char *format, ... );函數fscanf()以scanf()的執行方式從給出的文件流中讀取數據,
fscanf()的返回值是事實上已賦值的變數的數,如果未進行任何分配時返回EOF。
int fprintf( FILE *stream, const char *format, ... );fprintf()函數根據指定的format(格式)發送參數到由stream指定的文件。fprintf()只能和printf()一樣工作,
fprintf()的返回值是輸出的字元數,發生錯誤時返回一個負值。
『叄』 java編程:從一個名為file的文件中逐行讀取然後將讀取的內容放進另一個文件file1中。
/**
* 以行為單位讀取文件,常用於讀面向行的格式化文件
*
* @param fileName
* 文件名
*/
public static void readFileByLines(String fileName) {
file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行為單位讀取文件內容,一次讀一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次讀入一行,直到讀入null為文件結束
while ((tempString = reader.readLine()) != null) {
// 顯示行號
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 文件寫入
*
* @param filePath 路徑名稱
* @param sb 要寫入的字元
*/
public void writeFromBuffer(String filePath, String sb)throws IOException {
File file = new File(filePath);
FileWriter fw;
try {
fw = new FileWriter(file);
if (sb.toString() != null && !"".equals(sb.toString())) {
fw.write(sb.toString());
}
fw.close();
} catch (IOException e) {
throw new IOException("文件寫入異常!請檢查路徑名是否正確!");
}
}
自己組織一下,讀取的數據可以放在stringbuffer里然後在傳給寫入方法
『肆』 在C語言中,舉例說明如何打開一個文本文件,並讀入文件中的數據
1.首先,使用VS構建一個新的空項目,然後直接單擊ok。
『伍』 C語言編程:讀取當前目錄下的英文文章file.txt,按原格式顯示在屏幕上,咋寫
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10000
int main ()
{
char str[N];
char a[111][30];
int k=0,j=0;
FILE *fp;
if((fp=fopen("D:\file.txt","r"))!=NULL)
printf("文件打開成功 ");
else
{
printf("文件打開失敗 ");
exit(0);
}
while(fgets(str,N,fp)!=NULL)//利用fgets函數將文本中的非空字元全部儲存在數組str中
for(int i=0;i<strlen(str);i++)
if(str[i]!=' '&&str[i]!='.')
a[k][j++]=str[i];//將每個單詞儲存在二維數組a的每一行
else
{
k++;//行下標
j=0;//列下標
}
printf("共%d個單詞 ",k);
for(int i=0;i<=k;i++)
puts(a[i]);
fclose(fp);//關閉文件
return 0;
}
『陸』 用C語言編寫讀入並讀取一個文件,按照下面的要求編寫程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp,*ok;
char str1[80],str2[80];
if((fp=fopen("d:\file.txt","r+"))==NULL)//打開d盤下名為file的文本文件;
{
puts("file文件打開失敗!");
exit(0);
}
else
puts("file文件打開成功");
if((ok=fopen("d:\file1.txt","r"))==NULL)//打開d盤下名為file1的文本文件;
{
puts("file1文件打開失敗!");
exit(0);
}
else
puts("file1文件打開成功");
/*__________________*/
scanf("%[^!]",str1);//輸入一串字元,以!為結束標志;
fprintf(fp,"%s",str1);//將字元串str1寫入指針fp所指向的文件;
fscanf(ok,"%s",str2);//讀取指針ok指向的文件,將內容以字元串的形式存儲在數組str2中 ;
puts(str2);
/*__________________*/
fclose(fp);//關閉文件;
fclose(ok);
return 0;
}