讀寫檔案的案例

2021-10-10 08:55:00 字數 4346 閱讀 5575

常用api函式:

//c 庫函式 int fseek(file *stream, long int offset, int whence)

//設定流 stream 的檔案位置為給定的偏移 offset,引數 offset 意味著從給定的 whence 位置查詢的位元組數。

///c 庫函式 long int ftell(file* stream) 返回給定流 stream 的當前檔案位置。該函式返回位置識別符號的當前值

//c 庫函式 char *fgets(char *str, int n, file *stream)

//從指定的流 stream 讀取一行,並把它儲存在 str 所指向的字串內。

//當讀取 (n-1) 個字元時,或者讀取到換行符時,或者到達檔案末尾時,它會停止,具體視情況而定。

//c 庫函式 char* strstr(const char* haystack, const char* needle)

//在字串 haystack 中查詢第一次出現字串 needle 的位置,不包含終止符 『\0』。

//該函式返回在 haystack 中第一次出現 needle 字串的位置,如果未找到則返回 null。

//c 庫函式 char* strcat(char* dest, const char* src) 把 src 所指向的字串追加到 dest 所指向的字串的結尾。

//該函式返回乙個指向最終的目標字串 dest 的指標。

//c 庫函式 int fprintf(file* stream, const char* format, …) 傳送格式化輸出到流 stream 中。

test.cpp

#define  _crt_secure_no_warnings 

#include

#include

#include

#include

#include

"fun.h"

#define file_name "c:/users/ky/desktop/3.txt"

void

mymenu()

inttest_write()

;char valude[

1024]=

;int wlen =0;

printf

("\n請鍵入key:");

scanf

("%s"

, name)

;printf

("\n請鍵入valude:");

scanf

("%s"

, valude)

; ret =

write_file

(file_name, name, valude,

strlen

(valude));

if(ret !=0)

return0;

}int

test_read()

;char buf[

1024]=

;int rlen =0;

printf

("\n請鍵入key:");

scanf

("%s"

, name);

ret =

read_file

(file_name, name, buf,

&rlen);if

(ret !=0)

printf

("buf: %s\n"

, buf)

;return0;

}void

main()

}return

;}

fun.h

#ifndef _fun_h_

#define _fun_h_

#ifdef __cplusplus

extern

"c"#endif

#endif

fun.cpp

#define  _crt_secure_no_warnings 

#include

#include

#include

#include

#include

"fun.h"

#define maxline 2048

//迴圈讀每一行,檢查key配置項是否存在 若存在修改對應value值

//若不存在,在檔案末尾 新增 "key = value"

intwrite_file

(const

char

* filename,

const

char

* key,

const

char

* valude,

int len);if

(filename ==

null

|| key ==

null

|| valude ==

null

) fp =

fopen

(filename,

"r+");

if(fp ==

null)if

(fp ==

null)}

fseek

(fp,0l,

seek_end);

//把檔案指標從0位置開始,移動到檔案末尾

//獲取檔案長度;

length =

ftell

(fp)

;fseek

(fp,0l,

seek_set);

if(length >

1024*8

)while(!

feof

(fp)

)//目的是打造乙個新的filebuf

//key關鍵字是否在本行

ptmp =

strstr

(linebuf, key);if

(ptmp ==

null

)//key關鍵字不在本行, copy到filebuf中

else

//key關鍵在在本行中,替換舊的行,再copy到filebuf中

}//若key關鍵字,不存在 追加

if(itag ==0)

else

//若key關鍵字,存在,則重新建立檔案

fp =

fopen

(filename,

"w+t");

if(fp ==

null

)fputs

(filebuf, fp)

;//fwrite(filebuf, sizeof(char), strlen(filebuf), fp);

}end:

if(fp !=

null

)return rv;

return0;

}int

read_file

(const

char

* filename,

const

char

* key,

char

* buf,

int* len)

while(!

feof

(fp)

) ptmp =

strstr

(linebuf, key);if

(ptmp ==

null

)//判斷key是不是在 //所在行 是不是有key

ptmp = ptmp +

strlen

(key)

;//mykey1 = myvalude11111111 ==> "= myvalude1111111"

ptmp =

strchr

(ptmp,

'=');if

(ptmp ==

null

)//判斷key是不是在 //所在行 是不是有key

ptmp = ptmp +1;

////printf("ptmp:%s ", ptmp);

//獲取value 起點

while(1

)else

break;}

}//獲取valude結束點

while(1

)else

} pend = ptmp;

//賦值

*len = pend - pbegin;

memcpy

(buf, pbegin, pend - pbegin);}

end:

if(fp ==

null

)return0;

return0;

}

配置檔案讀寫案例

從左往右移動,如果當前字元為空,而且沒有結束 while isspace p begin p begin 0 while isspace p end end 0 if end 0 n end begin 1 非空元素個數 strncpy outbuf,p begin,n outbuf n 0 ret...

C 之讀寫檔案學習案例

讀檔案 using system.io using system using system.windows.forms 包含messagebox 函式 public class readfileexample filestream s new filestream foot.dat filemode...

NIO本地檔案讀寫和複製案例

1 往本地檔案中寫資料 要使用filechannel來往本地檔案寫入資料,那麼首先需要得到乙個filechannel物件。在jdk文件中關於filechannel的說命中可以看到這樣一段話 此類沒有定義開啟現有檔案或建立新檔案的方法,以後的版本中可能新增這些方法。在此版本中,可從現有的fileinp...