• Giga@hdv-tech.com
  • ບໍລິການອອນໄລນ໌ 24H:
    • 7189078c
    • sns03
    • 6660e33e
    • youtube 拷贝
    • instagram

    C, ການອ່ານເອກະສານ ແລະການຂຽນ

    ເວລາປະກາດ: ສິງຫາ-11-2023

    ອະທິບາຍວິທີທີ່ນັກຂຽນໂປລແກລມ C ສ້າງ, ເປີດ, ແລະປິດໄຟລ໌ຂໍ້ຄວາມ, ຫຼືໄຟລ໌ໄບນາຣີ.

    ໄຟລ໌, ຫມາຍເຖິງຊຸດຂອງ bytes, ບໍ່ວ່າຈະເປັນໄຟລ໌ຂໍ້ຄວາມຫຼືໄຟລ໌ສອງ, ພາສາ C, ບໍ່ພຽງແຕ່ສະຫນອງການເຂົ້າເຖິງຫນ້າທີ່ລະດັບເທິງ, ແຕ່ຍັງສະຫນອງການເອີ້ນ (OS) ພື້ນຖານເພື່ອປະມວນຜົນໄຟລ໌ໃນອຸປະກອນເກັບຮັກສາ. .ບົດນີ້ຈະອະທິບາຍການໂທທີ່ສໍາຄັນໃນການຄຸ້ມຄອງເອກະສານ.

    ເປີດໄຟລ໌

    ປົກກະຕິແລ້ວການນໍາໃຊ້ຟັງຊັນ fopen () ເພື່ອສ້າງໄຟລ໌ໃຫມ່ຫຼືເປີດໄຟລ໌ທີ່ມີຢູ່ແລ້ວ, ການໂທນີ້ຈະເລີ່ມຕົ້ນວັດຖຸຂອງປະເພດ FILE ທີ່ມີຂໍ້ມູນທີ່ຈໍາເປັນທັງຫມົດເພື່ອຄວບຄຸມການໄຫຼ.ນີ້ແມ່ນຕົ້ນແບບຂອງການເອີ້ນຟັງຊັນນີ້:

    FILE *fopen ( const char * filename , const char * mode );

    ທີ່ນີ້ຊື່ໄຟລ໌ແມ່ນສະຕຣິງເພື່ອຕັ້ງຊື່ໄຟລ໌, ຄ່າຂອງຮູບແບບການເຂົ້າເຖິງສາມາດເປັນຫນຶ່ງໃນຄ່າຕໍ່ໄປນີ້:

    ຮູບແບບ

    ລາຍລະອຽດ

    r

    ເປີດໄຟລ໌ຂໍ້ຄວາມທີ່ມີຢູ່ແລ້ວທີ່ອະນຸຍາດໃຫ້ມັນອ່ານໄດ້.

    w

    ເປີດໄຟລ໌ຂໍ້ຄວາມທີ່ອະນຸຍາດໃຫ້ຂຽນໃສ່ໄຟລ໌.ຖ້າໄຟລ໌ບໍ່ມີ, ໄຟລ໌ໃຫມ່ຈະຖືກສ້າງຂື້ນ.ທີ່ນີ້, ໂຄງການຂອງທ່ານຂຽນເນື້ອໃນໃນຕອນເລີ່ມຕົ້ນຂອງໄຟລ໌.ຖ້າໄຟລ໌ມີຢູ່, ມັນຈະຖືກຕັດເປັນສູນ ແລະຂຽນຄືນໃໝ່.

    a

    ເປີດໄຟລ໌ຂໍ້ຄວາມ ແລະຂຽນໃສ່ໄຟລ໌ໃນຮູບແບບເພີ່ມເຕີມ.ຖ້າໄຟລ໌ບໍ່ມີ, ໄຟລ໌ໃຫມ່ຈະຖືກສ້າງຂື້ນ.ທີ່ນີ້, ໂປຼແກຼມຂອງທ່ານຕື່ມເນື້ອຫາໃສ່ກັບໄຟລ໌ທີ່ທ່ານມີຢູ່ແລ້ວ.

    r+

    ເປີດໄຟລ໌ຂໍ້ຄວາມທີ່ອະນຸຍາດໃຫ້ທ່ານອ່ານແລະຂຽນໄຟລ໌.

    w+

    ເປີດໄຟລ໌ຂໍ້ຄວາມທີ່ອະນຸຍາດໃຫ້ທ່ານອ່ານແລະຂຽນໄຟລ໌.ຖ້າໄຟລ໌ນັ້ນມີຢູ່ແລ້ວ, ໄຟລ໌ຈະຖືກຕັດໃຫ້ສັ້ນລົງເປັນສູນ, ແລະຖ້າໄຟລ໌ບໍ່ມີ, ໄຟລ໌ໃຫມ່ກໍ່ຖືກສ້າງຂື້ນ.

    a+

    ເປີດໄຟລ໌ຂໍ້ຄວາມທີ່ອະນຸຍາດໃຫ້ທ່ານອ່ານແລະຂຽນໄຟລ໌.ຖ້າໄຟລ໌ບໍ່ມີ, ໄຟລ໌ໃຫມ່ຈະຖືກສ້າງຂື້ນ.ການອ່ານເລີ່ມຕົ້ນໃນຕອນຕົ້ນຂອງໄຟລ໌, ແລະການຂຽນພຽງແຕ່ຢູ່ໃນຮູບແບບການເພີ່ມເຕີມ.

    ຖ້າ​ຫາກ​ວ່າ​ໄຟລ​໌​ໄບ​ນາ​ຣີ​ທີ່​ປຸງ​ແຕ່ງ​, ໃຊ້​ຮູບ​ແບບ​ການ​ເຂົ້າ​ເຖິງ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​ເພື່ອ​ທົດ​ແທນ​ການ​ຂ້າງ​ເທິງ​ນີ້​:

    "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

    ປິດໄຟລ໌

    ເພື່ອປິດໄຟລ໌, ກະລຸນາໃຊ້ຟັງຊັນ fclose().ຕົ້ນ​ແບບ​ຂອງ​ຫນ້າ​ທີ່​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​:

    int fclose ( FILE * fp );

    • ຖ້າໄຟລ໌ຖືກປິດຢ່າງສໍາເລັດຜົນ, ຟັງຊັນ fclose() ກັບຄືນສູນ, ແລະຖ້າຂໍ້ຜິດພາດສົ່ງຄືນ EOF.ຟັງຊັນນີ້, ໃນຄວາມເປັນຈິງ, ເອົາຂໍ້ມູນອອກຈາກ buffer, ປິດໄຟລ໌, ແລະປ່ອຍຫນ່ວຍຄວາມຈໍາທັງຫມົດທີ່ໃຊ້ສໍາລັບໄຟລ໌ນັ້ນ.EOF ແມ່ນຄ່າຄົງທີ່ທີ່ກຳນົດໄວ້ໃນ header file stdio.h

    ຫ້ອງສະຫມຸດມາດຕະຖານ C ສະຫນອງຫນ້າທີ່ຕ່າງໆເພື່ອອ່ານແລະຂຽນໄຟລ໌ໂດຍຕົວອັກສອນຫຼືເປັນສາຍທີ່ມີຄວາມຍາວຄົງທີ່.

    ຂຽນໃສ່ໄຟລ໌

    ນີ້ແມ່ນຟັງຊັນທີ່ງ່າຍທີ່ສຸດທີ່ຈະຂຽນຕົວອັກສອນໃສ່ກະແສ:

    int fputc ( int c , FILE *fp );

    ຟັງຊັນ fputc () ຂຽນຄ່າຕົວອັກສອນຂອງພາລາມິເຕີ c ເຂົ້າໄປໃນກະແສຜົນຜະລິດທີ່ fp ຊີ້ໃຫ້ເຫັນ.ຖ້າການຂຽນປະສົບຜົນສໍາເລັດ, ມັນຈະສົ່ງຄືນຕົວອັກສອນທີ່ຂຽນແລະ EOF ຖ້າມີຂໍ້ຜິດພາດເກີດຂື້ນ.ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ຫນ້າ​ທີ່​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​ເພື່ອ​ຂຽນ​ສະ​ຕ​ຣິ​ງ​ທີ່​ລົງ​ທ້າຍ​ດ້ວຍ null ກັບ​ການ​ສະ​ຕ​ຣີມ​:

    int fputs ( const char *s , FILE *fp );

    ຟັງຊັນ fputs () ຂຽນສະຕຣິງ s ໄປຫາກະແສຜົນຜະລິດທີ່ fp ຊີ້ໄປຫາ.ຖ້າການຂຽນປະສົບຜົນສໍາເລັດ, ມັນຈະສົ່ງຄ່າທີ່ບໍ່ແມ່ນຄ່າລົບແລະ EOF ຖ້າມີຂໍ້ຜິດພາດເກີດຂື້ນ.ທ່ານຍັງສາມາດໃຊ້ຟັງຊັນຂອງ int fprintf (FILE * fp, const char * format, ... ) ຂຽນ string ກັບໄຟລ໌.ລອງໃຊ້ຕົວຢ່າງຕໍ່ໄປນີ້:

    ຫມາຍເຫດ: ໃຫ້ແນ່ໃຈວ່າທ່ານມີໄດເລກະທໍລີ tmp ທີ່ມີຢູ່, ແລະຖ້າມັນບໍ່ມີ, ທ່ານຈໍາເປັນຕ້ອງສ້າງມັນຢູ່ໃນຄອມພິວເຕີຂອງທ່ານກ່ອນ.

    / tmp ມັກຈະເປັນໄດເລກະທໍລີຊົ່ວຄາວໃນລະບົບ Linux.ຖ້າທ່ານດໍາເນີນການຢູ່ໃນລະບົບ Windows, ທ່ານຈໍາເປັນຕ້ອງດັດແປງມັນກັບໄດເລກະທໍລີທີ່ມີຢູ່ໃນສະພາບແວດລ້ອມທ້ອງຖິ່ນ, ເຊັ່ນ: C: \ tmp, D: \ tmp, ແລະອື່ນໆ.

    ຕົວຢ່າງດໍາລົງຊີວິດ

    #ລວມທັງint main () { FILE *fp = NULL ;fp = fopen("/tmp/test.txt", "w+");fprintf (fp , "ນີ້ແມ່ນການທົດສອບສໍາລັບ fprintf...\n ");fputs ("ນີ້ແມ່ນການທົດສອບສໍາລັບ fputs...\n ", fp );fclose (fp );}

    ເມື່ອລະຫັດຂ້າງເທິງຖືກລວບລວມແລະປະຕິບັດ, ມັນຈະສ້າງໄຟລ໌ໃຫມ່ test.txt ໃນໄດເລກະທໍລີ / tmp.ແລະຂຽນເປັນສອງແຖວໂດຍໃຊ້ສອງຫນ້າທີ່ແຕກຕ່າງກັນ.ໃຫ້ອ່ານໄຟລ໌ນີ້ຕໍ່ໄປ.

    ອ່ານໄຟລ໌

    ຕໍ່ໄປນີ້ແມ່ນຫນ້າທີ່ງ່າຍດາຍທີ່ສຸດທີ່ຈະອ່ານຕົວອັກສອນດຽວຈາກໄຟລ໌:

    int fgetc ( FILE * fp );

    ຟັງຊັນ fgetc () ອ່ານຕົວອັກສອນຈາກໄຟລ໌ປ້ອນຂໍ້ມູນທີ່ຈຸດ fp.ຄ່າກັບຄືນແມ່ນຕົວອັກສອນທີ່ອ່ານແລະ EOF ຖ້າມີຂໍ້ຜິດພາດເກີດຂື້ນ.ຟັງຊັນຕໍ່ໄປນີ້ອະນຸຍາດໃຫ້ທ່ານອ່ານສະຕຣິງຈາກກະແສ:

    char *fgets ( char *buf , int n , FILE *fp );

    ຟັງຊັນ fgets () ອ່ານຕົວອັກສອນ n-1 ຈາກກະແສການປ້ອນຂໍ້ມູນໂດຍ fp.ມັນຄັດລອກສະຕຣິງທີ່ອ່ານໄປໃສ່ buffer buf ແລະຕໍ່ທ້າຍຕົວອັກສອນ null ໃນທ້າຍເພື່ອຢຸດສະຕຣິງ.

    ຖ້າຟັງຊັນນີ້ພົບກັບຕົວອັກສອນເສັ້ນທີ່ແຕກຫັກ '\n' ຫຼື EOF ຂອງຈຸດສິ້ນສຸດຂອງໄຟລ໌ກ່ອນທີ່ຈະອ່ານຕົວອັກສອນສຸດທ້າຍ, ຫຼັງຈາກນັ້ນພຽງແຕ່ກັບຄືນໄປຫາຕົວອັກສອນທີ່ອ່ານ, ລວມທັງການແບ່ງແຖວ.ທ່ານຍັງສາມາດໃຊ້ຟັງຊັນ int fscanf (FILE * fp, const char * format, ...) ເພື່ອອ່ານ string ຈາກໄຟລ໌, ແຕ່ມັນຢຸດການອ່ານເມື່ອພົບກັບຊ່ອງຫວ່າງທໍາອິດແລະເສັ້ນແບ່ງ.

    ຕົວຢ່າງດໍາລົງຊີວິດ

    #ລວມທັງint main () { FILE *fp = NULL ;char buff [255];fp = fopen("/tmp/test.txt", "r");fscanf (fp , "%s ", buff );printf("1: %s \n ", buff );fgets (buff , 255, (FILE *)fp );printf("2: %s \n ", buff );fgets (buff , 255, (FILE *)fp );printf("3: %s \n ", buff );fclose (fp );}

    ເມື່ອລະຫັດຂ້າງເທິງຖືກລວບລວມແລະປະຕິບັດ, ມັນຈະອ່ານໄຟລ໌ທີ່ສ້າງຂຶ້ນໃນພາກກ່ອນ, ຜົນໄດ້ຮັບຕໍ່ໄປນີ້:

    1: ນີ້ 2: ແມ່ນການທົດສອບສໍາລັບ fprintf ...

    3​: ນີ້​ແມ່ນ​ການ​ທົດ​ສອບ​ສໍາ​ລັບ​ການ fputs ...

    ທໍາອິດ, ວິທີການຂອງ fscanf() ພຽງແຕ່ອ່ານນີ້ .ເນື່ອງຈາກວ່າມັນພົບຊ່ອງຢູ່ທາງຫລັງ.ອັນທີສອງ, ໂທຫາ functon fgets () ເພື່ອອ່ານສ່ວນທີ່ຍັງເຫຼືອຈົນກ່ວາໃນຕອນທ້າຍຂອງເສັ້ນ.ສຸດທ້າຍ, ໂທຫາ fgets () ເພື່ອອ່ານແຖວທີສອງຢ່າງສົມບູນ.

    ຟັງຊັນ Binary I / O

    ສອງຟັງຊັນຕໍ່ໄປນີ້ແມ່ນໃຊ້ສໍາລັບການປ້ອນຂໍ້ມູນຖານສອງ ແລະຜົນຜະລິດ:

    size_t fread (void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file );size_t fwrite (const void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *a_file );

    ຟັງຊັນທັງສອງແມ່ນອ່ານແລະຂຽນສໍາລັບບລັອກການເກັບຮັກສາ - ປົກກະຕິແລ້ວ array ຫຼືໂຄງສ້າງ.

    ຂ້າງເທິງກ່ຽວກັບການອ່ານ ແລະການຂຽນໄຟລ໌ C ເປັນຂອງ HDV Phoelectron Technology Ltd., ການດໍາເນີນງານດ້ານວິຊາການຊອບແວ.ແລະບໍລິສັດສໍາລັບອຸປະກອນທີ່ກ່ຽວຂ້ອງກັບເຄືອຂ່າຍ (ເຊັ່ນ: ACONU/ ການສື່ສານONU/ ສະຫຼາດONU/ ເສັ້ນໄຍONU, ແລະອື່ນໆ) ໄດ້ນໍາເອົາທີມງານຊໍແວທີ່ມີປະສິດທິພາບ, ສໍາລັບລູກຄ້າທຸກຄົນປັບແຕ່ງຄວາມຕ້ອງການສະເພາະທີ່ຕ້ອງການ, ຍັງໃຫ້ຜະລິດຕະພັນຂອງພວກເຮົາສະຫລາດແລະກ້າວຫນ້າ.



    ເວັບ​ໄຊ​ຕ​໌​