開啟模式如下列表
模式 | 功能 |
---|---|
"r" | 讀取文字檔案 |
"w" | 新建文字檔案並寫入資料 |
"a" | 將資料附加在該文字檔案之後 |
"rb" | 讀取二進位檔 |
"wb" | 新建二進位檔並寫入資料 |
"ab" | 將資料附加在該二進位檔之後 |
"r+" | 讀取文字檔案並寫入資料 |
"w+" | 新建文字檔案並讀取、寫入資料 |
"a+" | 讀取文字檔案將附加資料在檔案最後 |
"rb+" 或 "r+b" | 讀取二進位檔並寫入資料 |
"wb+" 或 "w+b" | 新建二進位檔並讀取、寫入資料 |
"ab+" 或 "a+b" | 讀取二進位檔將附加資料在檔案最後 |
所謂的串流流向是指資料行進的方向,串流的英文原文為 stream ,原意就是水流,因為由輸入設備取得資料便像是有一長串電子流進入電腦之中,而將資料輸出到其它裝置的情況也極為類似。由標準輸入裝置取得資料稱為 stdin ,而將資料傳送到標準輸出裝置稱為 stdout ,另有 stderr 專門記錄錯誤的串流資訊。
以下程式示範將原本要顯示於螢幕的文字寫入檔案之中
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fPtr; char c; fPtr = freopen("oldname.txt", "w", stdout); if (!fPtr) { printf("檔案建立失敗...\n"); exit(1); } printf("Nature, time, and patience are three great physicians.\n"); printf("Easier said than done.\n"); printf("To teach a fish how to swim.\n"); fclose(fPtr); return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:cfreopen.c 功能:示範 stdio.h 中函數 freopen() 的使用 作者:張凱慶 時間:西元2010年6月 */
編譯後執行,結果如下
您可以繼續參考
輸出與輸入 stdio.h
- int getchar(void);
- char *gets(char *s);
- int putchar(int c);
- int puts(const char *s);
- int printf(const char *format, ...);
- int sprintf(char *s, const char *format, ...);
- int scanf(const char *format, ...);
- int sscanf(char *s, const char *format, ...);
- FILE *fopen(const char *filename, const char *mode);
- FILE *freopen(const char *filename, const char *mode, FILE *stream);
- int fflush(FILE *stream);
- int fclose(FILE *stream);
- int remove(const char *filename);
- int rename(const char *oldname, const char *newname);
- int fprintf(FILE *stream, const char *format, ...);
- int fscanf(FILE *stream, const char *format, ...);
- int fgetc(FILE *stream);
- char *fgets(char *s, int n, FILE *stream);
- int fputs(const char *s, FILE *stream);
- int fputs(const char *s, FILE *stream);
- size_t fread(void *ptr, size_t size, siz_t nobj, FILE *stream)
- size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream)
- int fseek(FILE *stream, long offset, int origin);
- long ftell(FILE *stream);
- void rewind(FILE *stream);
4 則留言:
請問一下
我一直搞不懂fopen和freopen有甚麼差別
可以大概跟我說一下嗎?
fopen 僅止於開啟或建立檔案, freopen 除了開啟或建立檔案之外,還可以指定將 stdin 或 stdout 的內容寫進檔案之中,如上例便是先建立一個 oldname.txt ,然後將接下來 printf() 內容都寫進檔案之中。
不好意思 我還是有點不了解 stdin 跟stdout 的意思?? printf()的訊息不是應該只會印在螢幕上嗎? 那為什麼會寫入檔案中呢?? 還是stdin是鍵盤輸入 而stdout是螢幕輸出 所以才能寫到檔案中!!
printf()不是只會印在螢幕上唷!它是將字串輸出到標準輸出裝置 stdout ,標準輸出裝置可以是螢幕、檔案、印表機或任何你可以拿來接電腦輸出的東西。而 freopen() 就是將標準輸出裝置改為檔案。標準函數庫裡頭很多東西的細節都相當複雜,知道怎麼用比較重要。
張貼留言