C C 檔案操作總結

2021-07-31 05:56:53 字數 3913 閱讀 5095

c檔案操作

相關函式:

file * fopen(const char * path,const char * mode);

r 開啟唯讀檔案,r+開啟可讀寫檔案(可覆蓋),該檔案必須存在

w 開啟只寫檔案,w+開啟可讀寫檔案(絕對覆蓋清空,相當於新檔案),若檔案不存在則建立該檔案

a 開啟只寫檔案,末尾追加,若檔案不存在則建立該檔案,a+ 開啟可讀寫檔案,末尾追加,若檔案不存在則建立該檔案,檔案流位置在頭(不可回退)

int fscanf(file *stream, char *format[,argument...]);//從流中輸入

int fprintf(file *stream, char *format[, argument,...]);//從流中輸出

file * fdopen(int fd,const char * mode);//檔案描述詞,用過socket,看見fd就不陌生,相當於windows中資源id,linux的一切都是檔案的概念,不做介紹,範圍太大,不常用的感覺

int fileno(file * stream);//獲取檔案描述詞(fd)

int feof(file * stream);//如到末尾返回非0

int fflush(file* stream);//重新整理緩衝區

size_t fread ( void *buffer, size_t size, size_t count, file *stream) ;

size_t fwrite(const void* buffer, size_t size, size_t count, file* stream);

int fgetc(file * stream);//讀取乙個字元,末尾eof

int getc(file * stream);//巨集定義,非真正呼叫

int getchar(void);//實質getc(stdin)

char * fgets(char * s,int size,file * stream);//從流中讀取size-1個字元或eof,最後加上null,成功返回s,否則null

int ungetc(int c,file * stream);//將指定字元寫回檔案流中,沒卵用

int fputc(int c,file * stream);//顧名思義

int putc(int c,file * stream);//與上意義相同,不做解釋

int putchar (int c);//putc(c,stdout)

int fputs(const char * s,file * stream);//顧名思義

size_t fwrite(const void * ptr,size_t size,size_t nmemb,file * stream);//儲存複雜型別

file * freopen(const char * path,const char * mode,file * stream);//重定向流,扯淡的玩意

void rewind(file * stream);//重設檔案流的讀寫位置為檔案開頭

int fseek(file * stream,long offset,int whence);//移動檔案流位置

seek_set 從距檔案開頭offset位移量為新的讀寫位置

seek_cur 以目前的讀寫位置往後增加offset個位移量

seek_end 將讀寫位置指向檔案尾後再增加offset個位移量。

當whence值為seek_cur 或seek_end時,引數offset允許負值的出現。

long ftell(file * stream);//取得檔案流的讀取位置

char * mktemp(char * template);//產生唯一的臨時檔名

int mkstemp(char * template);//建立唯一的臨時檔案,返回fd

void setbuf(file * stream,char * buf);//設定檔案流的緩衝區

void setbuffer(file * stream,char * buf,size_t size);//設定檔案流的緩衝區

void setlinebuf(file * stream);//設定檔案流為線性緩衝區

int unlink(const char * pathname);//刪除引數pathname 指定的檔案. 如果該檔名為最後連線點, 但有其他程序開啟了此檔案, 則在所有關於此檔案的檔案描述詞皆關閉後才會刪除. 如果引數pathname 為一符號連線, 則此連線會被刪除

int close(int fd);

int fclose(file * stream);

c++檔案操作

std::ifstream in("content.txt");  

std::string str((std::istreambuf_iterator(in)),  

std::istreambuf_iterator()); 

讀取整個檔案內容到stringstream

std::ifstream in("content.txt");  

std::stringstream buffer;  

buffer << in.rdbuf();  

讀取目錄檔案列表

#include#include//win linux 可跨平台獲取目錄下檔名稱

#include//linux獲取檔案型別、許可權等

using namespace std;

/*struct stat ;

mode_t:

s_ifmt 0170000 檔案型別的位遮罩

s_ifsock 0140000 scoket

s_iflnk 0120000 符號連線

s_ifreg 0100000 一般檔案

s_ifblk 0060000 區塊裝置

s_ifdir 0040000 目錄

s_ifchr 0020000 字元裝置

s_ififo 0010000 先進先出

s_isuid 04000 檔案的(set user-id on execution)位

s_isgid 02000 檔案的(set group-id on execution)位

s_isvtx 01000 檔案的sticky位

s_irusr(s_iread) 00400 檔案所有者具可讀取許可權

s_iwusr(s_iwrite)00200 檔案所有者具可寫入許可權

s_ixusr(s_iexec) 00100 檔案所有者具可執行許可權

s_irgrp 00040 使用者組具可讀取許可權

s_iwgrp 00020 使用者組具可寫入許可權

s_ixgrp 00010 使用者組具可執行許可權

s_iroth 00004 其他使用者具可讀取許可權

s_iwoth 00002 其他使用者具可寫入許可權

s_ixoth 00001 其他使用者具可執行許可權

上述的檔案型別在posix中定義了檢查這些型別的巨集定義:

s_islnk (st_mode) 判斷是否為符號連線

s_isreg (st_mode) 是否為一般檔案

s_isdir (st_mode) 是否為目錄

s_ischr (st_mode) 是否為字元裝置檔案

s_isblk (s3e) 是否為先進先出

s_issock (st_mode) 是否為socket

struct dirent;*/

int main()

closedir(dir);

return 0;

}

c c 檔案操作總結

計算機在物理記憶體上面存放的都是二進位制,所以文字檔案和二進位制檔案的主要區別是在邏輯上的而不是物理上的。而從檔案的編碼方式來看,檔案可以分為文字檔案和二進位制檔案。文字檔案是基於字元編碼的檔案,常見的有ascii unicode等,二進位制檔案是基於值編碼的檔案,可以看成是變長編碼,你可以根據自己...

C C 讀取檔案總結

c方式 include define f path d myfile file.dat char c intmain c 逐行讀取文字 ifstream file file.open strpath,ios in if file.is open return string strline while...

C C 檔案操作 2

ofstream fs binary ios binary ofstream fs character.txt int i 32765 fs 無論以二進位制檔案模式開啟還是以文字模式開啟,檔案中都是儲存著文字!似乎c c 中的binary 模式不起作用!後來查閱資料才知道 要想在c c 中將資料以二...