C Files I/O: Създаване, отваряне, четене, запис и затваряне на файл
C Управление на файлове
Файл може да се използва за съхраняване на голям обем от постоянни данни. Подобно на много други езици "C" предоставя следните функции за управление на файлове,
- Създаване на файл
- Отваряне на файл
- Четене на файл
- Писане във файл
- Затваряне на файл
Следват най-важните функции за управление на файлове, налични в „C,“
функция | цел | |
---|---|---|
fopen() | Създаване на файл или отваряне на съществуващ файл | |
fclose () | Затваряне на файл | |
fprintf() | Записване на блок от данни във файл | |
fscanf () | Четене на блокови данни от файл | |
getc () | Чете един символ от файл | |
putc () | Записва един знак във файл | |
getw () | Чете цяло число от файл | |
putw () | Записване на цяло число във файл | |
fseek () | Задава позицията на указател на файл към определено място | |
ftell () | Връща текущата позиция на файлов указател | |
пренавиване () | Задава указателя на файла в началото на файл |
Как да създадете файл
Когато искате да работите с файл, първата стъпка е да създадете файл. Файлът не е нищо друго освен място в паметта, където се съхраняват данни.
За да създадете файл в програма "C" се използва следният синтаксис,
FILE *fp; fp = fopen ("file_name", "mode");
В горния синтаксис файлът е структура от данни, която е дефинирана в стандартната библиотека.
fopen е стандартна функция, която се използва за отваряне на файл.
- Ако файлът не присъства в системата, той се създава и след това се отваря.
- Ако даден файл вече присъства в системата, той се отваря директно с това функция.
fp е файлов указател, който сочи към типа файл.
Всеки път, когато отваряте или създавате файл, трябва да посочите какво ще правите с файла. Файл в програмирането на C може да бъде създаден или отворен за целите на четене/запис. Използва се режим, за да укажете дали искате да отворите файл за някоя от посочените по-долу цели. Следват различните типове режими в програмирането на C, които могат да се използват при работа с файл.
Файлов режим | Descriptйон |
---|---|
r | Отворете файл за четене. Ако даден файл е в режим на четене, тогава никакви данни не се изтриват, ако файлът вече присъства в системата. |
w | Отворете файл за писане. Ако даден файл е в режим на запис, тогава се създава нов файл, ако файл изобщо не съществува. Ако даден файл вече присъства в системата, тогава всички данни във файла се съкращават и той се отваря за целите на писане. |
a | Отворете файл в режим на добавяне. Ако даден файл е в режим на добавяне, той се отваря. Съдържанието във файла не се променя. |
r+ | отворен за четене и писане от самото начало |
w+ | отворен за четене и писане, презаписване на файл |
a+ | отворен за четене и запис, добавяне към файл |
В дадения синтаксис името на файла и режимът са посочени като низове, следователно те винаги трябва да бъдат затворени в двойни кавички.
Пример:
#include <stdio.h> int main() { FILE *fp; fp = fopen ("data.txt", "w"); }
Изход:
Файлът се създава в същата папка, в която сте запазили кода си.
Можете да посочите пътя, където искате да създадете вашия файл
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
Как да затворите файл
Човек винаги трябва да затваря файл, когато операциите с него са приключили. Това означава, че съдържанието и връзките към файла са прекратени. Това предотвратява случайно увреждане на файла.
'C' предоставя функцията fclose за извършване на операция за затваряне на файл. Синтаксисът на fclose е следният,
fclose (file_pointer);
Пример:
FILE *fp; fp = fopen ("data.txt", "r"); fclose (fp);
Функцията fclose приема указател на файл като аргумент. След това файлът, свързан с файловия указател, се затваря с помощта на функцията fclose. Връща 0, ако затварянето е било успешно и EOF (край на файла), ако е възникнала грешка при затварянето на файла.
След затваряне на файла същият файлов указател може да се използва и с други файлове.
При програмирането на C файловете се затварят автоматично, когато програмата бъде прекратена. Затварянето на файл ръчно чрез писане на функция fclose е добра практика за програмиране.
Записване във файл
В C, когато пишете във файл, знаците за нов ред '\n' трябва да бъдат изрично добавени.
Библиотеката stdio предлага необходимите функции за запис във файл:
- fputc(char, file_pointer): Записва знак във файла, към който сочи file_pointer.
- fputs(str, file_pointer): Записва низ във файла, към който сочи file_pointer.
- fprintf(file_pointer, str, variable_lists): Отпечатва низ към файла, към който сочи file_pointer. Низът може по избор да включва спецификатори на формат и списък от променливи variable_lists.
Програмата по-долу показва как да извършите запис във файл:
Функция fputc():
#include <stdio.h> int main() { int i; FILE * fptr; char fn[50]; char str[] = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode" for (i = 0; str[i] != '\n'; i++) { /* write to file using fputc() function */ fputc(str[i], fptr); } fclose(fptr); return 0; }
Изход:
Горната програма записва един знак в fputc_test.txt файл, докато достигне символа на следващия ред „\n“, който показва, че изречението е написано успешно. Процесът е да вземете всеки знак от масива и да го запишете във файла.
- В горната програма създадохме и отворихме файл, наречен fputc_test.txt в режим на запис, и декларирахме нашия низ, който ще бъде записан във файла.
- Извършваме операция за запис на знак по знак, като използваме цикъл for и поставяме всеки знак в нашия файл, докато се срещне символът „\n“, след което файлът се затваря с помощта на функцията fclose.
fputs () Функция:
#include <stdio.h> int main() { FILE * fp; fp = fopen("fputs_test.txt", "w+"); fputs("This is Guru99 Tutorial on fputs,", fp); fputs("We don't need to use for loop\n", fp); fputs("Easier than fputc function\n", fp); fclose(fp); return (0); }
Изход:
- В горната програма създадохме и отворихме файл, наречен fputs_test.txt в режим на запис.
- След като извършим операция за запис, използвайки функцията fputs(), като напишем три различни струни
- След това файлът се затваря с помощта на функцията fclose.
fprintf() Функция:
#include <stdio.h> int main() { FILE *fptr; fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode" /* write to file */ fprintf(fptr, "Learning C with Guru99\n"); fclose(fptr); return 0; }
Изход:
- В горната програма създадохме и отворихме файл, наречен fprintf_test.txt в режим на запис.
- След извършване на операция за запис с помощта на функцията fprintf() чрез запис на низ, тогава файлът се затваря с помощта на функцията fclose.
Четене на данни от файл
Има три различни функции, предназначени за четене на данни от файл
- fgetc(file_pointer): Връща следващия знак от файла, към който сочи указателят на файла. Когато краят на файла е достигнат, EOF се изпраща обратно.
- fgets(буфер, n, file_pointer): Той чете n-1 символа от файла и съхранява низа в буфер, в който NULL символът '\0' е добавен като последен знак.
- fscanf(file_pointer, conversion_specifiers, variable_adresses): Използва се за разбор и анализ на данни. Той чете знаци от файла и присвоява входа към списък от променливи указатели variable_adresses, използвайки спецификатори за преобразуване. Имайте предвид, че както при scanf, fscanf спира да чете низ, когато се срещне интервал или нов ред.
Следната програма демонстрира четене от файла fputs_test.txt, използвайки съответно функциите fgets(),fscanf() и fgetc():
#include <stdio.h> int main() { FILE * file_pointer; char buffer[30], c; file_pointer = fopen("fprintf_test.txt", "r"); printf("----read a line----\n"); fgets(buffer, 50, file_pointer); printf("%s\n", buffer); printf("----read and parse data----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer char str1[10], str2[2], str3[20], str4[2]; fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4); printf("Read String1 |%s|\n", str1); printf("Read String2 |%s|\n", str2); printf("Read String3 |%s|\n", str3); printf("Read String4 |%s|\n", str4); printf("----read the entire file----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer while ((c = getc(file_pointer)) != EOF) printf("%c", c); fclose(file_pointer); return 0; }
Резултат:
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99
- В горната програма отворихме файла, наречен „fprintf_test.txt“, който преди беше написан с помощта на функцията fprintf() и съдържа низ „Learning C with Guru99“. Ние го четем с помощта на функцията fgets(), която чете ред по ред, където размерът на буфера трябва да е достатъчен, за да обработи целия ред.
- Отваряме отново файла, за да нулираме файла с указателя да сочи към началото на файла. Създайте различни низови променливи, за да обработвате всяка дума поотделно. Отпечатайте променливите, за да видите тяхното съдържание. fscanf() се използва главно за извличане и анализиране на данни от файл.
- Отворете отново файла, за да нулирате указателния файл да сочи в началото на файла. Прочетете данните и ги отпечатайте от файла символ по знак, като използвате функцията getc(), докато се срещне операторът EOF
- След извършване на операция за четене на файл, използвайки различни варианти, ние отново затворихме файла с помощта на функцията fclose.
Интерактивно четене и запис на файлове с getc и putc
Това са най-простите операции с файлове. Getc означава знак за получаване, а putc означава знак за поставяне. Тези две функции се използват за обработка само на един знак наведнъж.
Следната програма демонстрира функциите за обработка на файлове в програмирането на "C":
#include <stdio.h> int main() { FILE * fp; char c; printf("File Handling\n"); //open a file fp = fopen("demo.txt", "w"); //writing operation while ((c = getchar()) != EOF) { putc(c, fp); } //close file fclose(fp); printf("Data Entered:\n"); //reading fp = fopen("demo.txt", "r"); while ((c = getc(fp)) != EOF) { printf("%c", c); } fclose(fp); return 0; }
Изход:
- В горната програма създадохме и отворихме файл, наречен demo в режим на запис.
- След извършване на операция за запис, файлът се затваря с помощта на функцията fclose.
- Отново отворихме файл, който вече съдържа данни в режим на четене. Ще се изпълни цикъл while, докато не бъде намерен eof. След като бъде намерен краят на файла, операцията ще бъде прекратена и данните ще бъдат показани с помощта на функцията printf.
- След извършване на операция за четене файлът отново се затваря с помощта на функцията fclose.
Oбобщение
- Файлът е пространство в паметта, където се съхраняват данни.
- Програмирането на C предоставя различни функции за работа с файл.
- Механизъм за манипулиране с файлове се нарича управление на файлове.
- Файлът трябва да бъде отворен, преди да се извършват операции с него.
- Файлът може да бъде отворен в режим на четене, запис или добавяне.
- Функциите getc и putc се използват за четене и запис на един символ.
- Функцията fscanf() позволява четене и анализ на данни от файл
- Можем да четем (използвайки getc функция) цял файл чрез цикъл, за да покрие целия файл, докато се срещне EOF
- Можем да пишем във файл, след като създадем името му, като използваме функцията fprintf() и трябва да има знак за нов ред в края на текста на низа.