常用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...