ອະທິບາຍວິທີທີ່ນັກຂຽນໂປລແກລມ 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, ແລະອື່ນໆ) ໄດ້ນໍາເອົາທີມງານຊໍແວທີ່ມີປະສິດທິພາບ, ສໍາລັບລູກຄ້າທຸກຄົນປັບແຕ່ງຄວາມຕ້ອງການສະເພາະທີ່ຕ້ອງການ, ຍັງໃຫ້ຜະລິດຕະພັນຂອງພວກເຮົາສະຫລາດແລະກ້າວຫນ້າ.