1.mfc
cstring filename="d:\\3.txt",files="d:\\32.txt",filestring;
cstdiofile f,g;
if(f.open(filename, cfile::moderead) == true) //filename為開啟檔名
} cstring decimaltobinary(cstring strdecimal)//
將輸入的十進位制數轉換為二進位制數
return strbinary;
}2. c語言
file *fp;
if(fp=fopen(filename,"r"))
}
fclose(fp);
void strend(char *str)
} char* findstr(char* str,char p)
3. c++讀取按行讀取
#include
#include
#include
#include
int main()
c 檔案操作
1.fopen、fclose
fopen:功能開啟檔案
fclose:功能關閉檔案
標頭檔案:#include
定義函式:file * fopen(const char * path,const char * mode);
函式引數說明:
path:字串包含欲開啟的檔案路徑及檔名。
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()後請作錯誤判斷及處理。
2.fread 和 fwrite:
宣告:
#include
size_t fread(void *ptr, size_t size, size_t nmemb, file *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);
引數解釋:
size
指出一條記錄的長度,
nmemb
指出要讀或寫多少條記錄,這些記錄在ptr
所指的記憶體空間中連續存放,共佔size * nmemb
個位元組,fread
從檔案stream
中讀出size * nmemb
個位元組儲存到ptr
中,而fwrite
把ptr
中的size * nmemb
個位元組寫到檔案stream
中。
返回值:
讀或寫的記錄數,成功時返回的記錄數等於nmemb,出錯或讀到檔案末尾時返回的記錄數小於nmemb,也可能返回0。
功能:
fread()──從fp所指向檔案的當前位置開始,一次讀入size個位元組,重複count次,並將讀入的資料存放到從buffer開始的記憶體中; buffer是存放讀入資料的起始位址(即存放何處)。
fwrite()──從buffer開始,一次輸出size個位元組,重複count次,並將輸出的資料存放到fp所指向的檔案中。buffer是要輸出資料在記憶體中的起始位址(即從何處開始輸出)。
fread
和fwrite
用於讀寫記錄,這裡的記錄是指一串固定長度的位元組,比如乙個int
、乙個結構體或者乙個定長陣列。
nmemb
是請求讀或寫的記錄數,fread
和fwrite
返回的記錄數有可能小於nmemb
指定的記錄數。例如當前讀寫位置距檔案末尾只有一條記錄的長度,呼叫fread
時指定nmemb
為2,則返回值為1。如果當前讀寫位置已經在檔案末尾了,或者讀檔案時出錯了,則fread
返回0。如果寫檔案時出錯了,則fwrite
的返回值小於nmemb
指定的值。下面的例子由兩個程式組成,乙個程式把結構體儲存到檔案中,另乙個程式和從檔案中讀出結構體。
3.fseek用法
int fseek(file *stream, long offset, int fromwhere);
引數:
第乙個引數file指標
第二個引數移動的偏移量
第三個引數移動到**
分別用3個巨集
seek_set 既0 檔案開頭
seek_cur 既1 檔案當前位置
seek_end 既2 檔案結尾
不推薦用數字 最好用巨集
簡言之:
fseek(fp,100l,seek_set);把fp指標移動到離檔案開頭100位元組處;
fseek(fp,100l,seek_cur);把fp指標移動到離檔案當前位置100位元組處;
fseek(fp,100l,seek_end);把fp指標退回到離檔案結尾100位元組處。
此函式跟ftell函式結合常用來計算流的長度:
fseek(fp, 0, seek_end);
long filelength = ftell(fp);
取檔案長度
file * file;
fseek(file, 0, seek_end);
long len=ftell(file);
fseek(file,0,seek_set);
long ftell(file * stream);
函式說明
ftell()用來取得檔案流目前的讀寫位置。引數stream為已開啟的檔案指標。
返回值
當呼叫成功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存放錯誤**。
linux讀取按行讀寫文字檔案
1.include 2.include 3.include 4.include 5.include 6.include 7.8.9.typedef struct item t item 13.14.15.去除字串右端空格 16.17.char strtrimr char pstr 18.25.26....
C 快速隨機按行讀取大型文字檔案
下面是我實現的乙個資料檔案隨機讀取類,可以隨機讀取大型文字檔案的某一行。在我機器上對乙個130mb的文字檔案,讀取第200000的速度從傳統做法的400ms提高到了3ms。一般對文字檔案進行讀取時,一般採用readline 進行逐行讀取。在這種情況下,c 內的filestream和buffereds...
shell按行分割文字檔案
大家常用的分割文字的方法都是通過sed n 命令來操作,sed 的優點是可以指定具體的行,缺點每次分割要重新讀取整個文字,效率低了點。在高人指點下發現split這個方法好用些,也參考了其他的資料總結一下split用法。split 引數 需要分割的檔案 b size 對file進行切分,每個小檔案大小...