Dekri kijan pwogramè C a kreye, ouvri, epi fèmen yon dosye tèks, oswa yon dosye binè.
Yon fichye, vle di yon seri de bytes, kit se yon dosye tèks oswa yon dosye binè, C Language, non sèlman bay aksè a fonksyon ki pi wo yo, men tou li bay apèl ki kache (OS) pou trete dosye sou aparèy depo a. . Chapit sa a pral eksplike apèl enpòtan yo nan jesyon dokiman.
louvri-dosye
Anjeneral lè l sèvi avèk fopen () fonksyon an pou kreye yon nouvo dosye oswa louvri yon dosye ki deja egziste, apèl sa a inisyalize yon objè nan kalite a FICHIER ki gen tout enfòmasyon ki nesesè yo kontwole koule a. Men pwototip apèl fonksyon sa a:
FILE *fopen (const char * filename, const char * mode);
Isit la non fichye se yon fisèl pou bay non yon fichye, valè mòd aksè a kapab youn nan valè sa yo:
modèl | deskripsyon |
r | Louvri yon dosye tèks ki egziste deja ki pèmèt li li. |
w | Louvri yon dosye tèks ki pèmèt ekri nan dosye a. Si fichye a pa egziste, yo kreye yon nouvo fichye. Isit la, pwogram ou a ekri kontni an depi nan konmansman an nan dosye a. Si fichye a egziste, li pral tronke nan longè zewo epi li pral re-ekri. |
a | Louvri yon dosye tèks epi ekri nan dosye a nan yon mòd ajoute. Si fichye a pa egziste, yo kreye yon nouvo fichye. Isit la, pwogram ou ajoute kontni nan dosye ou deja genyen yo. |
r+ | Louvri yon dosye tèks ki pèmèt ou li ak ekri dosye a. |
w+ | Louvri yon dosye tèks ki pèmèt ou li ak ekri dosye a. Si fichye a deja egziste, fichye a tronke a zewo longè, epi si fichye a pa egziste, yo kreye yon nouvo fichye. |
a+ | Louvri yon dosye tèks ki pèmèt ou li ak ekri dosye a. Si fichye a pa egziste, yo kreye yon nouvo fichye. Lekti a kòmanse nan kòmansman an nan dosye a, epi ekri a se sèlman nan mòd ajoute. |
Si yo trete dosye binè, sèvi ak mòd aksè sa a pou ranplase pi wo a:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
dosye fèmen
Pou fèmen fichye a, tanpri itilize fonksyon fclose(). Pwototip fonksyon an se jan sa a:
int fclose (FILE *fp);
- Si fichye a fèmen avèk siksè, fonksyon fclose() la retounen zewo, epi si erè a retounen EOF. Fonksyon sa a, an reyalite, retire done yo nan tanpon an, fèmen fichye a, epi degaje tout memwa yo itilize pou fichye a. EOF se yon konstan defini nan dosye header stdio.h
Bibliyotèk estanda C a bay divès fonksyon pou li ak ekri fichye pa karaktè oswa kòm yon fisèl longè fiks.
Ekri nan dosye a
Men fonksyon ki pi senp pou ekri karaktè nan kouran an:
int fputc ( int c , DOSYE *fp );
Fonksyon fputc () ekri valè karaktè paramèt c nan kouran pwodiksyon ke fp lonje dwèt sou. Si ekriti yo reyisi, li retounen karaktè ekri a ak EOF a si yon erè rive. Ou ka itilize fonksyon sa a pou ekri yon fisèl ki fini ak yon nil nan kouran an:
int fputs (const char *s , FILE *fp );
Fonksyon fputs () ekri fisèl yo nan kouran pwodiksyon an kote fp la montre. Si ekri yo reyisi, li retounen yon valè ki pa negatif ak EOF a si yon erè rive. Ou kapab tou itilize fonksyon int fprintf (FILE * fp, const char * fòma,...) ekri yon kòd nan fichye a. Eseye egzanp sa a:
Remak: Asire w ke ou gen yon anyè tmp ki disponib, epi si li pa egziste, ou bezwen kreye li sou òdinatè w an premye.
/ tmp se nòmalman yon anyè tanporè sou sistèm Linux la. Si ou kouri sou sistèm Windows la, ou bezwen modifye li nan yon anyè ki egziste nan anviwònman lokal la, tankou: C: \ tmp, D: \ tmp, elatriye.
egzanp vivan
#enkli
Lè kòd ki anwo a konpile epi egzekite, li kreye yon nouvo dosye test.txt nan anyè / tmp la. Epi ekri sou de liy lè l sèvi avèk de fonksyon diferan. Ann li dosye sa a apre.
Li dosye a
Sa ki anba la a se fonksyon ki pi senp pou li yon karaktè sèl nan yon dosye:
int fgetc ( FILE * fp );
Fonksyon fgetc() la li yon karaktè nan fichye antre kote fp la montre. Valè retounen se karaktè li ak EOF si yon erè rive. Fonksyon sa a pèmèt ou li yon fisèl nan yon kouran:
char *fgets ( char *buf , int n , FILE *fp );
Fonksyon fgets () li n-1 karaktè nan kouran D 'ki dirije pa fp. Li kopye fisèl li a nan buf la tanpon epi ajoute yon karaktè nil nan fen a mete fen nan fisèl la.
Si fonksyon sa a rankontre yon karaktè liy kase '\ n' oswa EOF nan fen dosye a anvan li dènye karaktè a, Lè sa a, sèlman retounen nan karaktè yo li, ki gen ladan kase liy. Ou ka itilize tou fonksyon int fscanf (FILE * fp, const char * format,...) pou li fisèl ki soti nan fichye a, men li sispann li lè w rankontre premye espas ak liy kraze.
egzanp vivan
#enkli
Lè kòd ki pi wo a konpile epi egzekite, li li dosye ki te kreye nan seksyon anvan an, ki pwodui rezilta sa yo:
1: Sa a 2: se tès pou fprintf...
3: Sa a se tès pou fputs...
Premyèman, metòd fscanf() sèlman li sa a .paske li rankontre yon espas nan do a. Dezyèmman, rele functon fgets () pou li pati ki rete a jouk nan fen liy lan. Finalman, rele fgets () pou li dezyèm ranje a nèt.
Fonksyon binè I/O
De fonksyon sa yo yo itilize pou antre ak pwodiksyon binè:
size_t fread (void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *yon_file ); size_t fwrite (const void *ptr , size_t size_of_elements , size_t number_of_elements , FILE *yon_file );
Tou de fonksyon yo li ak ekri pou blòk depo-anjeneral etalaj oswa estrikti.
Pi wo a sou lekti ak ekri dosye C fè pati HDV Phoelectron Technology Ltd., yon operasyon teknik lojisyèl. Ak konpayi an pou ekipman rezo ki gen rapò (tankou: ACONU/ kominikasyonONU/ entèlijanONU/ fibONU, elatriye) te pote ansanm yon ekip lojisyèl pwisan, pou chak kliyan Customize demand yo eksklizif ki bezwen li, tou kite pwodwi nou yo pi entelijan ak avanse.