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() и трябва да има знак за нов ред в края на текста на низа.











