c語言是流式
『壹』 c語言中文件是流式文件,應該怎麼存取數據
用讀寫文件就可以了,下面我寫了個簡單的讀寫:#include <stdio.h> int ch[256];
FILE *input = fopen( "in.txt", "r" );//開一個用消老世來讀的文件FILE *output = fopen("out.txt", "w");//開含森一個用來寫的文件
while(fgets(input, 255, ch))//持續讀文件{ fprintf(output, "%s", ch);//把讀到的東拿肢西寫出來;}fclose(input);//關掉讀的文件fclose(output);//關掉寫的文件
『貳』 C語言中的 輸入流 是什麼意思
首先,你要明白什麼是「流」。直觀地講,流就像水一樣,不存在大小問題,也避免了完整性問題。非流的數據傳輸,比如你下載一張圖片,需要整幅圖片下載完之後才能使用,而流則不同,就像水,你取一杯也可以用,取一桶也可以用。所以說,流是一種數據傳輸的模式。
而輸入流和輸出流,差別在於出和入,是相對於程序而言的。「輸入流式得到數據,輸出流是輸出數據」,這種說法是對的。你把問題想復雜了,輸入是程序得到外部數據,輸出是程序向外部傳輸數據,二者沒有必然的聯系,都是流,差別是方向不同,也就是說,程序可以只有輸入流而沒有輸出流,或者只有輸出流而沒有輸入流。
另外補充一下,流的好處是接收方可以提前處理,縮短等待時間,提高速度。比如你上youku看視頻,並不是整個視頻下載好了才播放的,而是下一點播一點。但是不是所有應用都適合,比如加密了的文件,往往需要整個加密文件接收完了才能解密。
『叄』 c語言 標准輸入流
由於程序中經常有大量對文件的輸入輸出操作,它經常構成了程序的主要部分,因而C語言提供了很多輸入輸出的函數,它們分別用於兩種類型文件輸入輸出系統:即由ANSI標準定義的緩沖文件(也稱標准文件(流)輸入輸出(I/O)系統);另一類是ANSI標准中沒有定義的非緩沖文件(也稱非標准文件(流)輸入輸出(I/O)系統)。
我們已經熟悉了通過鍵盤和顯示器進行輸入輸出的一些函數,如scanf(),printf()等等,這些通過控制台(鍵盤、顯示器等)進行I/O的操作,可以看作標准文件輸入輸出系統的一些特例,實際上在標准輸入輸出系統中的一些函數,有關文件的參數(文件結構指針或稱流指針),只要用標准設備的流指針代替,這些標准輸入輸出函數即成為控制台I/O函數。在任何程序執行時,C系統都定義了5個標准設備文件可供使用。自動打開的5個標准設備文件的文件結構指針(在標准I/O系統中)和文件代號將有一個規定值:
設備 標准文件I/O系統中的流指針名 非標准文件……
鍵盤(標准輸入) stdin 0
顯示器(標准輸出) stdout 1
顯示器(標准錯誤) stderr 2
串列口(標准輔助) stdoux 3
列印機(標准列印) stdprn 4
這樣,不論在標准文件系統還是非標准文件系統中,文件結構只要用上述的流指針或文件代號代替,則這些函數也均適用於控制台設備。
一、文本流和二進制流
在C中引入了流(stream)的概念。它將數據的輸入輸出看作是數據的流入和流出,這樣不管是磁碟文件或者是物理設備(列印機、顯示器、鍵盤等),都可看作一種流的源和目的,視他們為同一種東西,而不管其具體的物理結構,即對他們的操作,就是數據的流入和流出。這種把數據的輸入輸出操作對象,抽象化為一種流,而不管它的具體結構的方法很有利於編程,而涉及流的輸出操作函數可用於各種對象,與其具體的實體無關,即具有通用性。
在C中流可分為兩大類,即文本流(text stream)和二進制流(binary stream)。所謂文本流是指在流中流動的數據是以字元形式出現。在文本流中,\'\\n\'被換成回車CR和換談或行LF的代碼0DH和0AH。而當輸出時,則0DH和0AH本換成\'\\n\'。
二進制流是指流動的是二進制數字序列,若流中有字元,則用一個位元組的二進制ASCII碼表示,若是數字,則用一個位元組的二進制數表示。在流入流出時,對\\n符號不進行變換。例如2001這個數,在文本流中用其ASCII碼表示為:
\'2\' \'0\' \'0\' \'1\'
| | | |
50 48 48 49
共佔4位元組。而在二進制流中則表示為:00000111 11010001 用十六進制就是07D1。只佔兩位元組含鎮伍。
由此看出,二進制流比文本流節省空間,且不用進行對\\n的轉換,這樣可以大大加快流的速度,提高效率。因而,對於含有大量數字信息的數字流,可以採用二進制流的方式;對於含有大量字元信息的流,則採用文本流的方式。
二、流和文件
在C語言中流就是一種文件形式,它實際上就表示一個文件或設備(從廣義上講,設備也是一種文件)。把流當作文件總覺得不習慣,因而有人稱這種和流等同的文件為流式文件,流的輸入輸出也稱為文件的輸入輸出操作。當流到磁碟而成旅純為文件時,意味著要啟動磁碟寫入操作,這樣流入一個字元(文本流)或流入一個位元組(二進制流)均要啟動磁碟操作,將大大降低傳輸效率(磁碟是慢速設備),且降低磁碟的使用壽命。為此,C語言在輸入輸出的使用使用了緩沖技術,即在內存為輸入的磁碟文件開辟了一個緩沖區(預設為512位元組),當流到該緩沖區裝滿後,再啟動磁碟一次,將緩沖區內容裝到磁碟文件中去。讀取文件也是類似。
在C語言中將此種文件輸入輸出操作稱為標准輸入輸出,或稱流式輸入輸出(因這種輸入輸出操作是ANSI C推薦的標准)。還有一種是不帶緩沖文件輸入輸出,稱為非標准文件輸入輸出或低級輸入輸出,它將由DOS直接管理。關於這兩種輸入輸出文件系統下節將會介紹。
三、文件FILE的數據結構
typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
}FILE;
這是Turbo C中使用的定義(在stdio.h文件中),不同的C編譯器,可能使用不同的定義,但基本含義變化不會太大。
flags: 是一個10位的標志字,其具體含義如下:
位 代表符號 含義
0 _F_READ 讀
1 _F_WRIT 寫
2 _F_BUF 由fclose釋放緩沖區
3 _F_LBUF 行緩沖
4 _F_ERR 出錯標志
5 _F_EOF EOF文件尾標志
6 _F_BIN 二進制方式
7 _F_IN 在進行輸入
8 _F_OUT 在進行輸出
9 _F_TERM 文件是一個終端
其他各欄位內容以及flags欄位內各位所的功能,請參照其他一些資料。這里不多說了,它目前並不是我們要求的內容。
應該注意,不要把文件指針和FILE結構指針混為一談,它們代表兩個不同的地址。文件指針指出了對文件當前讀寫的數據位置,而FILE結構指針是指出了打開文件所對應的FILE結構在內存中的地址,這個指針它實際本身也包含了文件指針的信息。流指針中的各欄位是供C語言內部使用的,用戶不應該存取它的任何欄位。
『肆』 C語言對二進制文件的存取是以什麼為單位進行的。
c語言文件把數據看作是一連串的字元(位元組)。C語言文件是一個字元(位元組)的序列,是一字元流或位元組流,是一種流式文件。根據數據的組織形式,可分為文本文件和二進制文件。
文本文件又稱為ASCII文件,每一個位元組中存放一個ASCII代碼,代表一個字元。例如,一個整數123,若用.ASCII文件存放,佔3個位元組的
存儲
單元,1、2、3各用一個位元組
存儲
。而1、2、3的ASCII碼分別為49、50、51,故123用ASCII文件存放時,存放形式為001100010011001000110011。
二進制文件是直接用數據的二進制形式存放。例如,對整數123,二進制為0000000001111011,用二進制文件存放,需2個位元組,存放形式為0000000001111011。
使用ASCII碼文件,一個位元組代表一個字元,便於對字元一一處理和輸出,但佔用較多的存儲空間,並且要花費轉換時間(ASCII碼與二進制之間的轉換)。使用二進制文件,
在內存中的數據形式與輸出到外部文件中的數據形式完全一致,可以克服ASCII文件的缺點,但不直觀,一個位元組並不對應一個字元或一個數,不能直接輸出字元形式。一般中間數據用二進制文件保存,輸入輸出使用ASCII文件。
『伍』 關於C語言中的流式文件:fseek 移動位元組數,請高手指點!
fseek用於二進制文件。你這是文本文件,比如一個整數佔4個位元組,如果你整數是10000,那麼用文本寫入至少佔5個位元組(加個空格就是6),這樣你怎麼用sizeof()確定要跳轉多少位元組呢?所以...
文本文件的跳轉不能用feek,但是你這種格式統一的文件,可以用判搏漏斷換行符的方式來跳轉。陪悉
修改方式:
以記錄的方式,二進制方式存取。
輸出到文件的蘆銀乎時候,直接把類的對象fwrite()到文件中,讀取的時候,直接用fread()讀取整個對象。
最好格式化一下文件頭,在頭裡面加一個表示數據的個數的整數。
類似代碼:
void SavePaperToFile( char* fileName )
{
int i;
FILE * fp = fopen(fileName, "wb");
if(NULL == fp)
{
printf("\t!!!!Save data to file %s Failed!\n",fileName);
return;
}
fwrite(&paperQuesCount, sizeof(paperQuesCount), 1, fp);
for(i=0; i<paperQuesCount; i++)
{
if(fwrite(&examPaper[i], sizeof(Question), 1, fp) < 1)
{
printf("\t!!!!Save Data Error! Not All Question Saved!Saved Count = [%d]\n", i);
fclose(fp);
return;
}
}
fclose(fp);}
void LoadPaperFromFile( char* fileName )
{
int i;
FILE * fp = fopen(fileName, "rb");
if(NULL == fp)
{
printf("\t!!!!Open file %s Failed!\n",fileName);
return;
}
fread(&paperQuesCount, sizeof(paperQuesCount), 1, fp);
if(paperQuesCount<0 || paperQuesCount>MAX_QUESTIONS)
{
printf("\t!!!!File Error!\n\t****Paper Questions Account Error!\n");
paperQuesCount = 0;
fclose(fp);
return;
}
for(i=0; i<paperQuesCount; i++)
{
if(fread(&examPaper[i], sizeof(Question), 1, fp) < 1)
{
printf("\t!!!!File Read Error! Not All Question Loaded!Load Count = [%d]\n", i);
paperQuesCount = i;
fclose(fp);
return;
}
}
fclose(fp);
}
『陸』 C語言中流式文件的兩種形式
二進制格式和文本格式
『柒』 c語言中的流式文件時什麼意思
流式文件:蔽帶文件裡面是字元型或者位元組型;
另一種就是二進制構宏唯蘆山盯成文件的基本單位是字元的,這一類文件稱為流式文件
『捌』 在C語言中,文件按存儲形式劃分可分為-----和-----
在C語言中文件按存儲形式可劃分為文本文件和二進制文件,文本文件又稱純文本文件。
文本文件是一種計算機文件,它是一種典型的順序文件,其文件的邏輯結構又屬於流式文件。文本文件是指以ASCII碼方式(也稱文本方式)存儲的文件,更轎好確切地說,英文、數字等字元存儲的是ASCII碼,而漢字存儲的是機內碼。文本文件中除了存儲文件有效字元信息(包括能用ASCII碼字元表示的回車、換行等信息)外,不能存儲其他任何信息。二進制文件是指包含在ASCII及擴展ASCII字元中編寫的數據或程序指令的文件,廣義的二進制文件即指文件,由文件在外部設備的存放形式為二進制而得名。狹義的二進制文件即除文本文件以外的文件。文本文件是一種由很多行閉李鉛字元構成的計算機文件。文本文件存在於計算機系統中,通常在文本文件最後一行放置文件結束標志。文本文件的編碼基於字元定擾吵長,解碼相對要容易一些;二進制文件編碼是變長的,靈活利用率要高,而解碼要難一些,不同的二進制文件解碼方式是不同的。