檔案與資料夾處理學習心得

處理檔案及資料夾多了很多要注意的事項及觀念,處理起來複雜許多。先前的字串看得太快,到這一章時就覺得有些障礙,求快的下場就是如此。但書上針對c的部份並沒有寫得太多,所以以目前的學習狀況而已,應該算是可以了吧。重點應該是在後面的C++,這也是自己要趕進度的原因。接下來的C就不能趕速度,還是儘可能的做想得到的所有測試,才不會越到後面越痛苦。

底下是「檔案與資料夾處理」這章所抽出來的相關函數的用法及部份測試說明。

  1. FILE *fopen(char *filename,char *mode)
  2. int fclose(FILE *fp)
  3. int fputs(char *str,FILE *fp)
  4. char *fgets(char *str,int num,FILE *fp)
    ex: while(fgets(line,50,fp)!=NULL){}
  5. int putc(int ch, FILE *fp)
  6. char getc(FILE *fp)
  7. int fprintf(FILE *fp, char *control,…)
    ex: fprintf(fp,”%d=>%s\n”,1,line);
  8. int fscanf(FILE *fp, char *control,…)
    ex:
    while(fscanf(fp,”%s”,line)!=EOF)
    printf(“%s\n”,line);
  9. fp=fopen(“filename.dat”,”wb”);
  10. 「C的字元和位元組被視為相同的資料型態」。應該是資料型態的大小一致的關係吧。所以可以使用getc()和putc()兩個函數來進行二進位檔案的讀寫
  11. 隨機存取以記錄為單位,必須要搭配「結構」來儲存記錄。
  12. size_t fwrite(void *ptr, size_t size, size_t n, FILE *fp)
    size_t 在ANSI-C是unsigned int
    ex:
    student temp;
    fwrite(&temp,sizeof(temp),1,fp);
  13. int ferror(FILE *fp)
    ex: if(ferror(fp))printf(“錯誤: 寫入錯誤!\n”)
  14. size_t fread(void *ptr, size_t size, size_t n, FILE *fp)
  15. int feof(FILE *fp);
    ex:
    while(!feof(fp)){
    if(fread(&std, sizeof(std),1, fp)){
    }
    }
  16. int fseek(FILE *fp, long offset, int origin)
    ex:
    fseek(fp,rec*sizeof(temp),SEEK_SET)
    ORIGIN:{ SEEK_SET,SEEK_CUR,SEEK_END}
  17. int fflush(FILE *fp)
  18. long ftell(FILE *fp)
  19. void rewind(FILE *fp)
  20. remove(char *filename)
  21. rename(char *oname, char *nname)
  22. 關於scanf後面再加上一個getchar()函數來避免enter鍵的影響。應該是scanf只接受格式化字元格式的資料,不符合的資料會繼續往下傳(程式的流程),所以如果之後馬上接 scanf,先前的enter就會直接傳給它,直接影響到使用者操作。所以要使用getchar(),用它使用緩衝區及透過enter啟動的特性來避免這個問題。
  23. char *getcwd(char *name,int len)
  24. int chdir(char *path)
  25. int mkdir(char *path)
  26. int rmdir(char *path)
  27. 操作目錄的工作要先載入<dir.h>標頭檔(visual c++ 2005使用<direct.h>)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design