物聯網學習教程—檔案的定位
檔案的定位
1. rewind函式
rewind函式可以強制使當前工作指標指向檔案的開頭。一般在要重新從頭讀寫檔案時使用。如下例,在讀了檔案dfr.dat一遍送顯示器後,檔案的位置指標已移到檔案的最後,為了重新讀一遍再寫到檔案dfw.dat中,必須先執行一次rewind函式,才能正確讀出。
例1 將已建好的檔案dfr.dat的內容順序讀一遍送顯示器, 再讀一遍複製到檔案dfw.dat中。
#include<stdio.h>
main( )
{ int i;
char ch;
float f, f1;
FILE *fp1, *fp2;
if((fp1=fopen("dfr.dat", "r"))==NULL)
{ printf("Can not open the file for reading\n");
exit(0);
}
if((fp2=fopen("dfw.dat", "w"))==NULL)
{printf("Can not open the file for writing\n");
exit(0);
}
fscanf(fp1, "%c %d %f", &ch, &i, &f);
printf("%c, %5d, %4.1f\n", ch, i, f);
rewind(fp1);
fscanf(fp1, "%c %d %f", &ch, &i, &f1);
fprintf(fp2, "%c %d %f", ch, i, f1);
fclose(fp1);
fclose(fp2);
}
2. fseek函式
利用fseek函式可以控制檔案位置的指標進行隨機讀寫。
fseek函式的呼叫形式為 fseek(檔案型別指標, 位移量, 起始點);
起始點用0、1 或2 代表, 0——檔案的開始, 1——當前位置, 2——檔案末尾;
位移量指從起始點向前移動的位元組數;
fseek函式一般用於二進位制檔案, 因為文字檔案要發生字元轉換,計算位置時容易發生混亂。
例 1 將例10.3形成的職工資料檔案中的第1,3,5個工人的資訊讀出、 送顯。
#include<stdio.h>
#define SIZE 6
struct staff
{ char name[10];
int salary;
int cost;
} worker[SIZE];
main()
{ FILE *fp;
int i;
if((fp=fopen("work.dat", "rb"))==NULL)
{printf("Can not open the file\n");
exit(0);
}
for(i=0; i<SIZE; i++, i++)
{fseek(fp, i*sizeof(struct staff), 0);
fread(&worker[i], sizeof(struct staff), 1, fp);
printf(" %s %d %d\n", worker[i].name, worker[i].salary, worker[i].cost);
}
fclose(fp);
}
若形成work.dat檔案時的輸入資料為
Li1 1100 100
Li2 1200 200
Li3 1300 300
Li4 1400 400
Li5 1500 500
Li6 1600 600
則此程式的執行結果為
Li1 1100 100
Li3 1300 300
Li5 1500 500
3. ftell函式
ftell函式的作用是得到流式檔案中位置指標的當前位置, 用相對於檔案開頭的位移量來表示。
由於檔案的位置指標經常移動,往往不易搞清其當前位置,用ftell()函式可以返回其當前位置,若返回-1L,表示函式呼叫出錯。 例如,
i=ftell(fp);
if(i==-1L)printf("error\n");
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2654747/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物聯網學習教程—檔案的讀寫二
- 物聯網學習教程—檔案的讀寫一
- 物聯網學習系列教程
- 物聯網學習教程——if語句
- 物聯網學習教程——switch語句
- 物聯網學習教程——if語句2
- 物聯網學習教程——執行緒池執行緒
- 物聯網學習教程—列舉型別型別
- 物聯網學習教程—字串與指標字串指標
- 物聯網學習教程—c++學習應該注意的點C++
- 物聯網學習教程—const用法的體會
- 物聯網學習教程——一維陣列的引用陣列
- 物聯網學習教程——二維陣列的引用陣列
- 物聯網學習教程—函式的返回值函式
- 物聯網學習教程—Linux 可執行檔案結構與程式結構Linux
- 物聯網學習教程—const關鍵字
- 物聯網學習教程—多型的實現機制多型
- 物聯網的學習路線
- 物聯網學習教程—— 執行緒私有資料執行緒
- 物聯網學習教程——格式輸入與輸出
- 物聯網學習教程—用typedef定義型別型別
- 物聯網學習教程—Const用法和體會
- 物聯網學習教程— 多維陣列與指標陣列指標
- 物聯網學習教程—函式引數和函式的值函式
- 物聯網學習教程—常見錯誤和程式除錯除錯
- 物聯網學習教程— 字元指標作函式引數字元指標函式
- 物聯網學習教程——執行緒同步與互斥:讀寫鎖執行緒
- 物聯網學習教程——邏輯運算子和邏輯表示式
- 物聯網學習教程—定義結構體型別變數的方法結構體型別變數
- 物聯網學習教程Linux系統程式設計之檔案描述符的複製:dup()和dup2()Linux程式設計
- 物聯網學習教程—Linux系統程式設計之程式介紹Linux程式設計
- 物聯網學習教程—Linux系統程式設計之多工實現(二)Linux程式設計
- 物聯網教程 demo1效果
- 學習日記——阿里雲物聯網平臺阿里
- 物聯網專案落地困境
- 物聯網常見的十種定位技術的優缺點
- 物聯網時代,學習Web前端有哪些新機會?Web前端
- 不懂嵌入式何談物聯網?這套物聯網影片教程限時送