常用開檔方式
開啟用法
"r":唯讀
FILE *fp;
fp = fopen("/file_path/name.txt", "r");
fclose(fp);
"a+":附加在檔案後面
"w":寫入
內容讀取
char buf[512];
int len, val;
len = fgets(buf, sizeof(buf), fp); // 讀整行
len = fread(buf, 1, sizeof(buf), fp); // 讀固定長度
fscanf(fp, "%s %*s %d", buf, &val); // 格式化讀取
%*s 代表略過這個欄位
範例 1:
FILE *fp;
char buf[512];
if((fp = fopen("/file_path/name.txt", "r"))) {
while(fgets(buf, sizeof(buf), fp)) {
printf("%s", buf);
}
fclose(fp);
}
範例 2:
FILE *fp;
char buf[512];
size_t len;
if((fp = fopen("/file_path/name.txt", "r"))) {
while((len = fread(buf, 1, sizeof(buf), fp)) > 0) {
printf("%.*s", len, buf);
}
fclose(fp);
}
FILE *fp;
char buf[512];
size_t len;
if((fp = fopen("/file_path/name.txt", "r"))) {
while((len = fread(buf, 1, sizeof(buf), fp)) > 0) {
printf("%.*s", len, buf);
}
fclose(fp);
}
註: sizeof(buf) 和 1 在某些平台,不能交換使用,會讀取不正確
範例 3:
FILE *fp;
char buf[512];
int val = 0; // 要記得給預設值,不然抓不到值,就會是沒初始化的亂數
memset(buf, '\0', sizeof(buf)); // 跟val一樣,初始化
if((fp = fopen("/file_path/name.txt", "r"))) {
fscanf(fp, "%s %d", buf, &val);
printf("%s, %d", buf, val);
fclose(fp);
}
內容寫入
fprintf(fp, "%s %d\n", buf, val); // 格式化寫入
fwrite(buf, 1, sizeof(buf), fp); // 寫固定長度
讀寫位置變更
SEEK_SET:移動到,從頭算起 +2 B
fseek(fp, SEEK_SET, 2);
SEEK_CUR:移動到,從目前位置算起 +2 B
SEEK_END:移動到,從尾算起 -2 B
(也可以把 2 改為 -2,移動方向會相反)
沒有留言:
張貼留言