當前位置:首頁 » 編程語言 » c語言fopen函數的用法

c語言fopen函數的用法

發布時間: 2023-05-22 15:18:00

c語言文件操作函數freopen的用法

fopen()函數功能:打開一個文件。
原型:FILE * fopen(const char * path,const char * mode);
需要#include<stdio.h>

返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
一般打開文件會進行讀取或寫入操作,如果打開文件失敗,也就無法順利進行相應的讀寫操作,所以一般在調用fopen()之後要作錯誤判斷及處理。

⑵ C語言fopen函數中文件打開方式(參數值)

C語言fopen函數用於打開文件。
函數原型:FILE
*
fopen(const
char
*
path,const
char
*
mode);
參數:
path
字元串類型,表示文件所在的路徑,包括文件名
mode
打開文件的模式、
返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno
中。
mode:
r
以只讀方式打開文件,該文件必須存在。
r+
以可讀寫方式打開文件,該文件必須存在。
rb+
讀寫打開一個二進制文件,允許讀寫數據,文件必須存在。
w
打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+
以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
(原來的EOF符不保留)
wb
只寫打開或新建一個二進制文件;只允許寫數據。
wb+
讀寫打開或建立一個二進制文件,允許讀和寫。
ab+
讀寫打開一個二進制文件,允許讀或在文件末追加數據。
實例:
#include<stdio.h>
#define
F_PATH
"d:\\myfile\\file.dat"
int
main(void)
{
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");
if(NULL==fp)
{
return
-1;//要返回錯誤代碼
}
fclose(fp);
fp=NULL;//需要指向空,否則會指向原打開文件地址
return
0;
}

⑶ C語言裡面文件fopen函數有個追加方式打開文件,什麼是追加方式呢

打開文件時以追加方式即可fopen(filename, "ab ")

⑷ 關於c語言中fopen的打開方式

這個網站的資料大部分是windows和linux通用的。
http://man.chinaunix.net/develop/c&c++/linux_c/default.htm

fopen(打開文件)
相關函數
open,fclose
表頭文件
#include<stdio.h>
定義函數
FILE * fopen(const char * path,const char * mode);
函數說明
參數path字元串包含欲打開的文件路徑及文件名,參數mode字元串則代表著流形態。
mode有下列幾種形態字元串:
r 打開只讀文件,該文件必須存在。
r+ 打開可讀寫的文件,該文件必須存在。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫打開的文件為二進制文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字元。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)許可權,此文件許可權也會參考umask 值。
返回值
文件順利打開後,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
附加說明
一般而言,開文件後會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。
範例
#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(「noexist」,」a+」);
if(fp= =NULL) return;
fclose(fp);
}

⑸ C語言fopen函數如何執行的問題急急急!!!

//你的代碼中有兩處錯誤,如下備注
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable : 4996)
int main(void)
{
char name[100];
char ch;
int i=0;
FILE* fp;
int count=0;
printf("請輸入文件名:");
// while 裡面括弧位置錯誤,以下是改過來的
while ((ch = getchar()) != '\n')
{
name[i] = ch;
i++;
}
name[i] = '\0'; // 這里錯了, 是 i不是i+1
if ((fp = fopen(name, "r")) == NULL)
{
printf("Can't open %s\n", name);
exit(EXIT_FAILURE);
}
while ((ch = getc(fp)) != EOF)
{
putc(ch, stdout);
count++;
}
fclose(fp);
printf("File %s has %lu characters\n", name,count);
return 0;
}

⑹ c++中fopen函數讀文件怎麼用文件數據

本文分別簡單講述了如何利用C和C++庫函則衡數對文件的讀寫,涵蓋了常用的文件操作函數。網上關於C/C++文件操作的介紹的博客很多,所以本文也大同小異,也主要是做一個備忘,不有每次都網路了。但本文重點在於幾個庫函數的運用,而不是從文件的屬性或分類開始。
一、C文件操作:
C語言中,文件的操作都是通過一個FILE類型的文件指針進行,也就是說只有通過文件指針,才能調用相應的文件。FILE是一個由系統定義的結構體(定義在stdio.h中),可以存放文件的相關信息。
文件的打開(fopen函數)
文件的譽和操作過程一般為:打開 => 讀/寫 => 關閉。
fopen函數的原型如下:
FILE* fopen(const char* filename, const char* mode);
函數調用就比較簡單了:
FILE* fp;
fp = fopen("file1.txt", "r");
如果打開成功,返回file1.txt文件的指針,如果打開失敗,返回一個NULL指針,所以調用fopen()後我們需要檢查fp的值才進行下一步操作。fopen()的第一個參數為文件名,第二個參數為文件打開方式,含義如下表:
說明: 1. 使用"r"時,如果文件不存在,則出錯。
2. 使用"w"時,如果沒有文件,則創建一個新文件。
3. 使用"a"時,如果希望向文件尾添加數據,則該文件必須存在,否則出錯。
4. "r+","w+","a+"都是可以輸入和輸出數據,但必須遵守上述3點
5. 操作二進制文件時,加上"b"字元,且二進制文件對換行符不會進行轉換,而文本文件會將換行符轉換為回車和換行兩個字元。
文件的關閉(fclose函數)
在使用完一個文件後,若不關閉則會造成系統資源泄漏。使用fclose()關閉文件即可,原型為 int fclose(FILE* fp)。使用:fclose(fp); flose()返回0時為順利關閉文件,否則返回EOF(-1)。
文件的讀寫
1) fputc(), fgetc()分別為從文件流中寫和讀一個字元,原型分別如下:
寫:int fputc(int c, FILE* fp); 讀:int fgetc(FILE* fp); 失敗時均返回EOF
2) fputs(), fgets()分別為從文件流中寫和讀一個字元串,原型分別如下:
寫:int fputs(const char* str, FILE* fp); 例如: fputs("I love this game!", fp);
讀:char* fgets(char* str, int n, FILE* fp); 從流中讀取n-1個字元或讀完一行,參數str用於接收讀取的字元串。注意當讀取一行時,不包括行尾的'\n'字元。
3) fseek() 一般用於二進制模式打開的文件中,功能是定位到流中指定的位置。原型如下:
int fseek(FILE* fp, lont offset, int whence); 參數offset是移動的字元數,whence是移動的基準,取值是:
SEEK_SET 0 //文件開頭
SEEK_CUR 1 //當前讀寫的位置
SEEK_END 2 //文件尾部
4) fprintf(),fscanf()是將數據按格式輸出輸入到文件流中,用法類似printf()和scanf()。原型分別如下:
int fprintf(FILE* fp, const char* format, ...); 它與printf()不同的就是將數據寫到了文件流中,而不是控制台罷了。
int fscanf(FILE* fp, cosnt char* format, ...); 從文件流中按格式讀取,與scanf()不同的就是數據是從文件流中讀取而已。
例如: fprintf(fp, "count=%d", 5); fscanf(fp, "%d", &x);
5) feof()是檢測是否已到文件尾,是返回真,否則返回0,原型孫虛做是 int feof(FILE* fp);
6) rewind() 則是把當前的讀寫位置回到文件開始,相當於 fseek(fp, 0L, SEEK_SET); 原型: void rewind(FILE* fp);
7) remove() 刪除文件,原型: int remove(const char* filename); 參數為要刪除的文件名,成功則返回0;
8) fread(), fwrite() 它們相當於可將一塊的數據讀出或寫入,相當的方便。原型如下:
size_t fread(void* ptr, size_t size, size_t n, FILE* fp); 從流中讀指定個數的字元,size是每塊的位元組婁,n則是讀取的塊數。
size_t fwrite(const void* ptr, size_t size, size_t n, FILE* fp); 類似的是向文件流中寫入n塊size位元組數的數據。可以看到數據指針為void*型,即可以使用任何類型的指針來替換。例如:
現在一個結構體: struct student_t{char name[16]; int id; int age;}; 創建三個學生的數據並賦值:struct student_t stu[3];
這時,當我們找開文件後(一般是進制模式),可以調用fwrite()將三個學生的數據都寫入到文件中,兩種方式:
for(int i = 0; i < 3; ++i)
fwrite(&stu[i], sizeof(struct student_t), 1, fp);
或者:fwrite(stu, sizeof(struct student_t), 3, fp);
些時,我們調用fread()函數便可很輕松的將剛才寫入的3個學生的數據讀取出來:
struct student_t stus[3];
for(int i = 0; i < 3; ++i)
fread(&stus[i], sizeof(struct student_t), 1, fp);
或者:fread(stus, sizeof(struct student_t), 3, fp); 這樣便可將三個學生的數據讀入到stus變數中了(有木有很方便吶)
注意:如果你發現使用fread()讀取之後,最後一個學生讀取的數據不完全,可能是由於你沒有使用二進制模式打開的原因。
9) 最後是tmpfile()和tmpnam(),前者為生成一個臨時文件,後者為生成一個唯一的文件名,具體使用在此不介紹了。
二、使用C++中的fstream文件流操作類進行文件的讀寫
使用fstream操作文件與使用C庫函數類似,只不過fstream為面向對象方式,或多了上些C++的特性。首先,這里大概有三個流:
fstream為文件輸入輸出流,ifstream為輸入文件流,ofstream為輸出文件流,它們與ostream不同的就流的目的地為文件,而不是控制台。這里只介紹與上述的一些不同點:
1. 打開文件,如可以是 ifstream input_file("file2.txt"); 這樣將會以默認方式打開file2.txt文件並進行讀取。也可使用open()方式打開一個文件,並指定打開方式,例如:
ifstream input_file;
input_file.open("file2.txt", ios::binary);
打開後,可以使用is_open()檢測是否打開成功:
if(input_file.is_open()){},然後可以使用流操作符向文件寫數據了,例如:
input_file << "this is a test line";
input_file << "another info";
另外,這里的文件打開方式在ios空間下:
ios::app 添加到文件尾
ios::ate 把文件標志放在末尾而非起始。
ios::trunc 默認. 截斷並覆寫文件。
ios::nocreate 文件不存在也不創建。
ios::noreplace 文件存在則失敗。
ofstream使用方式類似,讀取一行數據可以使用getline(buf, count), 類型於fgets()。fstream類還提供一個很多其它方法,如fclose()為關閉文件,eof()用於檢測狀態是否已經到了文件末尾。
這里還有兩個類似於上述的fread()和fwrite()函數,是read(), write(),功能和用法類似類似,例如:
output_file.write((const char*)stu, 3 * sizeof(struct student_t));
input_file.read((char*)stus, 3 * sizeof(struct student_t));
注意,這里也需要使用二進制模式打開,否則read的時候最後的上些數據讀不完全。調用上面兩個函數後可以使用bad()來檢測文件流對象是否錯誤,例如,if(input_file.bad()){printf("error when read file\n"); return;},最後input_file.close()即可。
最後,C/C++文件的操作並不復雜,多使用幾次便可熟練掌握,需要注意的就是文件的打開方式,和當用同一個文件指針進行又讀又寫時,注意文件指針位置的移動。

⑺ C語言fopen函數和其參數

fopen()是一個文件I/O 裡面的函數 功能是打開一個文件。
其原型是 FILE *fopen(char *filename,char *mode)
返回值 :正常打開 返回指向文件結構體的指針。
失敗,返回NULL;

要用這個函數是首先要定義一個 文件指針,例
FILE *fp=NULL;
fp=fopen(「./txt」,"r"); 就是以只讀的方式打開當前目錄txt這個文件
第一個參數是要打開的文件名
第二個參數是:打開模式 r 只讀 , r+ 讀寫, w只寫 ,w+讀寫, a追加, a+

⑻ c語言fopen怎麼用

fopen一般與buf搭配使用,通過與fgets函數配合使用,將文件中的字元串讀到buf中,這樣達到讀出文件內容的目的代碼如下:

FILE tf=NULL;//定義一個文件指著,用於判斷fopen是否打開成功,並初始化為空;

char buf[1024]={0};//定義一個長度為1024的數組,用於存放文件的內容;

tf=fopen("c:example.txt","r");//打開c盤指定文件,並以只讀的形式打開,避免破壞原文件,將fopen的返回值放在指針tf中,若打開成功,則返回成功的指針,打開不成功則返回空;

if(tf != NULL)//判斷是否成功,不等於NULL則表示成功;

{

if(fgets(buf,1024,tf) != NULL)//將指向c盤文件的指針的內容賦給buf,長度為1024,並判斷是否獲取成功;

{

printf("buf=%s ",buf);//將成功獲取的字元串顯示在屏幕上;

}

}

fclose(tf);//將已打開的文件關閉;

(8)c語言fopen函數的用法擴展閱讀:

fopen的工作原理

FILE *fp;

fp=fopen("filename.txt","w");

首先檢測filename.txt是否存在,如果不存在則在磁碟 創建該文件,然後在內存開辟區域(應該是緩沖區)准備寫該文件

調用fclose時,將內存中的內容寫入到磁碟中去

測試(filename.txt不存在):

#include <stdio.h>

#include <stdlib.h>

int main()

{

FILE *fp1,*fp2;

fp1=fopen("filename.txt","w");

if(fp1==NULL)

{

printf("fp1 open failed!/n");

}

else

{

printf("fp1 open success!/n");

}

fp2=fopen("filename.txt","r");

if(fp2==NULL)

{

printf("fp2 open failed!/n");

}

else

{

printf("fp2 open success!/n");

}

fclose(fp1);

fclose(fp2);

return 0;

}

輸出:

fp1 open success!

fp2 open success!

說明文件操作不是互斥的,而且以寫方式打開文件,如果文件不存在,先在磁碟創建該文件

加入寫入語句:

#include <stdio.h>

#include <stdlib.h>

int main()

{

FILE *fp1,*fp2;

fp1=fopen("filename.txt","w");

if(fp1==NULL)

{

printf("fp1 open failed!/n");

}

else

{

printf("fp1 open success!/n");

fputs("abcdef",fp1);

}

fp2=fopen("filename.txt","w");

if(fp2==NULL)

{

printf("fp2 open failed!/n");

}

else

{

printf("fp2 open success!/n");

fputs("ABC/n",fp2);

}

fclose(fp1);

fclose(fp2);

return 0;

}

打開filename.txt文件:

ABC

f

說明後關閉的,刷新了磁碟數據

參考資料來源:fopen-網路

⑼ C語言中fopen函數打開文件後,文件以何種方式讀入內存

現在大多數的系統採用分頁機制,在打開文件成功後,文件並沒有載入進入內存,而是內核生成了一個文件描述符,文件描述符含有一個指向文件indoe結構的指針,在這個結構中存有文件真正的節點信息和位置。當讀取的時候,cpu首先判定需要讀取的位置是否在內存上,如果再則直接讀取(沒有所謂的按行讀取一說,按行讀取不過是找文件中的換行標而已,當讀到換行符的時候返回結果),如果不在內存上,則通過內存管理器進行載入,實際上,無論你是讀取一個字元還是一行,載入的大小是固定的,比如系統機制是載入1M,當你文件大於1M時也只載入1M,當不夠時全部載入。對不不同系統方式不同。(當然系統如果對讀文件有特殊的優化也不同),當你讀取之後,文件是繼續留在內存還是釋放,這里有另一套極其復雜的機制在管理。因為在你讀第一行和第二行的時間里,還有許多事情在並發的執行。

熱點內容
php旅遊網站系統 發布:2024-05-07 20:27:32 瀏覽:610
jdk源碼怎麼看 發布:2024-05-07 20:18:22 瀏覽:519
編程c語言自學書 發布:2024-05-07 20:12:03 瀏覽:422
usb大容量存儲驅動 發布:2024-05-07 19:02:01 瀏覽:815
紅米1s沒有存儲空間 發布:2024-05-07 18:59:09 瀏覽:505
妖雲解壓密碼 發布:2024-05-07 18:50:08 瀏覽:1002
sql語句等於怎麼寫 發布:2024-05-07 18:05:46 瀏覽:816
我的世界電腦版第三方伺服器大全 發布:2024-05-07 18:00:46 瀏覽:627
主伺服器的ip地址 發布:2024-05-07 17:58:50 瀏覽:546
組伺服器打電腦游戲 發布:2024-05-07 17:46:19 瀏覽:866