在程序一開始執行,就自己主動開啟了三個相應裝置的檔案。它們是標準輸入、輸出、錯誤流。分別用全域性檔案指標stdin、stdout、stderr表示,相應的檔案描寫敘述符為0。1
。2;stdin具有可讀屬性,預設情況下是指從鍵盤的讀取輸入,stdout和stderr具有可寫屬性,預設情況下是指向螢幕輸出資料。
將檔案路徑轉化為檔案指標:
#include //標頭檔案包括
file *fopen(const char *pach,const char *mode); //檔名稱 模式
int fclose(file *stream);
fopen以mode
的方式開啟或建立檔案,假設成功。將返回乙個檔案指標,失敗則返回null.
fopen建立的檔案的訪問許可權將以0666
與當前的umask
結合來確定。
在linux系統中,mode
裡面的』b』(二進位制)
能夠去掉。可是為了保持與其它系統的相容性。建議不要去掉。ab和a+b
為追加模式,在此兩種模式下,不管檔案讀寫點定位到何處。在寫資料時都將是在檔案末尾加入,所以比較適合於多程序寫同乙個檔案的情況下保證資料的完整性。一般使用r或者w
模式。
將資料夾名轉化為資料夾指標:
#include
#include
dir *opendir(const char *name); //開啟乙個資料夾,返回乙個dir
型別的指標
struct dirent *readdir(dir *dir); //讀取資料夾的一項資訊,並返回該項資訊的結構體指標
void rewinddir(dir *dir); //又一次定位到資料夾檔案的頭部
int closedir(dir *dir); //關閉資料夾檔案
讀取資料夾資訊的步驟為:
用opendir函式開啟資料夾;
使用readdir函式迭代讀取資料夾的內容,假設已經讀取到資料夾末尾。又想又一次開始讀,則能夠使用rewinddir函式將檔案指標又一次定位到資料夾檔案的起始位置。
用closedir函式關閉資料夾
opendir()用來開啟引數name
指定的資料夾,並返回dir*
形態的資料夾流,和檔案操作函式open()類似,接下來對資料夾的讀取和搜尋都要使用此返回值。函式失敗則返回null;
在字串讀取和寫入的時候以及格式化輸入輸出時經經常使用到檔案指標:
char buf[1024];
char *fgets(char *s, int size, file *stream);
int fputs(const char *s, file *stream);
fgets和fputs
從檔案流stream
中讀寫一行資料;當檔案指標為stdin/stdout分別表示從標準輸入流和輸出流 輸入和輸出。
此時類似於gets和puts函式
fgets能夠指定目標緩衝區的大小,讀取檔案的時候size大於該行的字元總數加2
(多出來的兩個。乙個儲存檔案本身的'\n'
換行,乙個儲存字串本身的結束標識'\0'
)。檔案並不會繼續讀下去,只不過這一行讀取完。隨後指向檔案的指標會自己主動偏移至下一行。
此時buf[strlen(buf)-1]裡存放的是
'\n'
用char*則要用malloc
分配記憶體
。fputs不會在行尾自己主動加入換行符。可是puts
會在標準輸出流中自己主動加入一換行符。
對二進位制形式的依照塊
來讀寫:
函式原型:
size_t fread(void *buffer,size_t size, size_t count, file *fp);
size_t fwrite(void *buffer,size_t size, size_t count, file *fp);
功能:讀/寫資料塊fread
與fwrite
一般用於二進位制檔案的輸入/輸出
fread:從fp
所指向的檔案裡讀取count
個塊,每乙個塊的長度為size
個位元組,存放到以buffer
為首位址的記憶體中。當中buffer
必須已經是由記憶體空間的。
fwrite:從以buffer
為首位址的記憶體中讀取count
個塊。每乙個塊的長度為size
個位元組,寫入到fp
所指向的檔案裡。
返回值:成功,返回讀/寫的塊數;出錯或檔案尾。返回0
說明:buffer: 指向要輸入/輸出資料塊的首位址的指標
size: 讀/寫的資料塊的大小(
位元組數)
count: 要讀/寫的資料塊的個數
fp: 要讀/寫的檔案指標
範例**:
#include #include typedef struct student
student;
void main()
,, };
student stu2;
file* fp = fopen("d:\\b.txt", "wb+");//寫開啟。轉化為檔案指標
if(null == fp)
fwrite(stu, sizeof(student), sizeof(stu)/sizeof(student), fp);
rewind(fp); /* 檔案指標又一次回到頭 */
fseek(fp, sizeof(student), seek_set); /* 定位,此處跳過一條記錄 */
fread(&stu2, sizeof(student), 1, fp); /* 從檔案裡讀取指定大小的塊 */
printf("%s-->%s-->%lf\n", stu2.sno, stu2.sname, stu2.score);
fclose(fp);
}
C語言檔案操作總結
文字模式 二進位制模式 c可以認識ctrl z為檔案結尾 c只會把ctrl z當做檔案中的乙個字元,真正的檔案結尾在後面 ms dos用 r n組合表示換行符,c將 r n看作 n程式將看到這兩個字元 此外,檔案的第乙個字元可能不是檔案的第乙個字元,所以用文字檔案開啟,ftell 可以返回正確的檔案...
C語言檔案操作總結
幾乎每乙個專案都有乙個日誌記錄功能,用於記錄軟體執行的情況方便日後的審計與審查。而日誌記錄就涉及到了檔案的讀寫操作。因此,本文對c語言下的檔案操作進行了總結。fopen用來開啟檔案。file fopen const char name,const char mode name 是要開啟檔案的檔名指標...
C語言檔案操作函式
1.fopen 開啟檔案 相關函式 open,fclose 表頭檔案 include 定義函式 file fopen const char path,const char mode 函式說明 引數path字串包含欲開啟的檔案路徑及檔名,引數mode字串則代表著流形態。mode有下列幾種形態字串 r ...