c語言為什麼不能寫文件
❶ C語言文件的讀取和寫入不成功是什麼原因
使用fopen的r方式可以實現讀取,用w+方式可以實現寫入。1.fopen的函數原型:FILE * fopen(const char * path,const char * mode); fopen函數的第一個參數是文件路徑,第二個參數是打開方式,有以下幾種方式:r 以只讀方式打開文件,該文件必須存在。r+ 以可讀寫方式打開文件,該文件必須存在。rb+ 讀寫打開一個二進制文件,允許讀數據。rw+ 讀寫打開一個文本文件,允許讀和寫。w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)wb 只寫打開或新建一個二進制文件;只允許寫數據。wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。wt+ 讀寫打開或著建立一個文本文件;允許讀寫。at+ 讀寫打開一個文本文件,允許讀或在文本末追加數據。ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函數庫打開的文件為二進制文件,而非純文字文件。 返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。
❷ 求大神幫忙看看c語言編程哪裡出問題了,文件始終是空白,無法寫入。
這具體要看你的num和stu[]數組的情況了。還有,這程序寫的是二進制文件,而且文件沒有擴展名。這都是在查看文件時要注意到的。經驗證,這個程序是可以寫入文件的。
❸ C語言,為什麼我無法將數據寫入文件
fclose(fp):函數fclose()關閉給出的文件流, 釋放已關聯到流的所有緩沖區. fclose()執行成功時返回0,否則返回EOF. 加上這一句是為了保護你的文件 如果不寫這句 那麼別的程序也可以隨意的對該文件進行寫入 這樣你的文件就是亂套了。 首先樓主要搞清楚getchar()是什麼意思 getchar() 相當於 getc(stdin)也就是從stdin緩沖流裡面讀數據 你寫這句也是為了防止你輸入字元後後面還有殘余 但是你第二個是讀文件數據流 根本就沒有讀緩沖流 所以不寫那句也可以的 不知道樓主明白否? 補充回答: 樓主沒有弄明白什麼是EOF EOF常被作為文件結束的標志。EOF 的值通常為 -1 它不是字元串 他相當於宏定義 它是不會被寫入到文件當中的 如樓主還有疑問 直接hi我吧
❹ 為什麼C語言文件無法寫入
賦值運算符沒有邏輯運算符優先順序高,
你的判斷語句少寫了一對括弧,從而導致文件指針賦值不正確。
應該改為:
if
(
(
fp=fopen("data",
"ab")
)==NULL
)
{
...
...
❺ c語言寫文件,偶爾寫不進去
如果像你所說,運行有能寫入成功的時候。說明代碼沒出錯。
那麼就在寫入方式上,wb+是新建二進制,已存在刪除,允許讀寫。
那麼如果文件無法刪除,比如文本進程被引用之類,就影響執行。
簡單說,你要用wb+,運行程序的時候,盡量不要對原文件進行其他操作。
或者你直接代碼每次新建一個新的文件,不重名。
❻ C語言將字元寫入文件失敗是什麼原因
for(crr)循環、for(i)循環及其下面的if(count)之間的邏輯關系混亂,請仔細檢查。
❼ 為什麼C語言文件無法寫入
賦值運算符沒有邏輯運算符優先順序高,
你的判斷語句少寫了一對括弧,從而導致文件指針賦值不正確。
應該改為:
if ( ( fp=fopen("data", "ab") )==NULL )
{
... ...
❽ C語言對文件操作,用fputs函數不能把字元串寫入文件
讀寫一個字元數據
經過前面的學習,我們學習了fread()、fwrite()函數的操作,這兩個函數都是對一段「內存塊」進行讀寫操作。那麼,C語言還提供了fgetc()、fputc()函數,對文件中的一個字元進行讀寫操作。這些函數的定義如下:
int fgetc(FILE *stream);
函數說明:從stream文件指針所指向的文件讀取1個字元,通過函數的返回值返回。例如:
char c = fgetc(fp);
就是從fp指向的文件,讀取1個字元的數據,通過函數返回值,設置給字元變數c。
int fputc(int c, FILE *stream);
函數說明:把參數c表示的字元,寫入stream文件指針所指向的文件。例如:
char c = 'M';
fputc(c, fp);
就是把參數c表示的字元變數,寫入文件指針fp指向的文件。如下是一個程序測試例子:
可以看到,新建一個test.txt文件,調用fputc()函數,把一個字元寫入到文件中。然後,再重新打開文件,讀取文件的數據,調用fgetc()函數讀取一個字元,得到的數據是剛剛寫入的字元。所以,通過這個例子,我們學習了fgetc()、fputc()函數的操作,對文件進行一個字元的讀寫操作。
3.5 讀寫一行字元數據
C語言提供了fgets()、fputs()函數對文件進行讀寫「一行」的數據,字元串以'\n'字元換行,注意,所謂的「一行」數據,它的最後一個有效字元是』\n』,表示換行符號。字元串的結束符,還是以』\0』為結尾,表示字元串結束符。其中fgets()函數的定義如下:
char *fgets(char *buf, int size, FILE *stream);
函數說明:從stream函數指針所指向的文件中,讀取size-1個位元組到buf緩存,不是讀取size個位元組,因為,buf[ ]緩存的第size個位元組存放字元串結束符,形成一個有效的字元串。
當讀取到換行符時,或者到達文件末尾時,結束文件的讀取操作。
返回值:讀取數據成功,返回存儲數據的緩存地址,就是參數buf的地址。如果讀取數據失敗,返回NULL。例如,讀取文件完,沒有數據可以再讀取,則返回NULL。
int fputs(const char *buf, FILE *stream);
函數說明:把參數buf指針指向的字元串,寫入到stream指向的文件。參數buf是一個字元串指針,必須指向一個合法的字元串。合法的字元串是以字元串結束符'\0'結束,表示一個字元串的結尾。
返回值:寫入數據成功,返回成功寫入的字元個數。失敗返回EOF標記。
如下是一個程序測試例子:
程序運行結果如下:
可以看到,程序調用fputs()函數,往打開的test.txt文件寫入數據。直接寫入一個字元串。然後,關閉文件,再重新打開文件。調用fgets()函數讀取數據,讀取數據的時候,遇到回車換行的字元'\n',表示一行數據,那麼,就返回讀取到的一行數據。
在實際的項目開發過程中,fgets()函數非常有用。例如,我們定義一個config.txt文件,裡面存放一些系統的配置信息,文件的格式如下:
cat /etc/config.txt
sys_pwd=123456
ApCliAuthMode=WPA2PSK
ApCliEncrypType=AES
ApCliChannel=1
ApCliDefaultKeyID=1
那麼,文件的配置信息是一行一行數據,所以,可以用fgets()函數,快速讀取出每一行系統配置信息。