Pliki C I / O: tworzenie, otwieranie, odczytywanie, zapisywanie i zamykanie pliku

Spisie treści:

Anonim

C Zarządzanie plikami

Plik może służyć do przechowywania dużej ilości trwałych danych. Podobnie jak wiele innych języków, „C” zapewnia następujące funkcje zarządzania plikami,

  1. Utworzenie pliku
  2. Otwieranie pliku
  3. Czytanie pliku
  4. Zapisywanie do pliku
  5. Zamknięcie pliku

Poniżej znajdują się najważniejsze funkcje zarządzania plikami dostępne w „C”,

funkcjonować cel, powód
fopen () Tworzenie pliku lub otwieranie istniejącego pliku
fclose () Zamknięcie pliku
fprintf () Zapisywanie bloku danych do pliku
fscanf () Odczytywanie danych bloku z pliku
getc () Odczytuje pojedynczy znak z pliku
putc () Zapisuje pojedynczy znak do pliku
getw () Odczytuje liczbę całkowitą z pliku
putw () Zapisywanie liczby całkowitej do pliku
fseek () Ustawia położenie wskaźnika pliku do określonej lokalizacji
ftell () Zwraca bieżącą pozycję wskaźnika pliku
przewijanie do tyłu () Ustawia wskaźnik pliku na początku pliku

W tym samouczku nauczysz się:

  • Jak utworzyć plik
  • Jak zamknąć plik:
  • Zapisywanie do pliku
    • Funkcja fputc ():
    • Funkcja fputs ():
    • Funkcja fprintf ():
  • Odczytywanie danych z pliku
  • Interaktywny odczyt i zapis plików za pomocą getc i putc

Jak utworzyć plik

Zawsze, gdy chcesz pracować z plikiem, pierwszym krokiem jest utworzenie pliku. Plik to nic innego jak przestrzeń w pamięci, w której przechowywane są dane.

Aby utworzyć plik w programie `` C '', używana jest składnia,

FILE *fp;fp = fopen ("file_name", "mode");

W powyższej składni plik jest strukturą danych zdefiniowaną w bibliotece standardowej.

fopen to standardowa funkcja służąca do otwierania pliku.

  • Jeśli pliku nie ma w systemie, jest tworzony, a następnie otwierany.
  • Jeśli plik jest już obecny w systemie, jest otwierany bezpośrednio przy użyciu tej funkcji.

fp to wskaźnik pliku, który wskazuje na plik typu.

Za każdym razem, gdy otwierasz lub tworzysz plik, musisz określić, co zamierzasz zrobić z plikiem. Plik w programie „C” można utworzyć lub otworzyć w celu odczytu / zapisu. Tryb służy do określenia, czy chcesz otworzyć plik w którymkolwiek z poniższych celów. Poniżej przedstawiono różne typy trybów programowania w języku „C”, których można używać podczas pracy z plikiem.

Tryb pliku Opis
r Otwórz plik do odczytu. Jeśli plik jest w trybie odczytu, żadne dane nie są usuwane, jeśli plik jest już obecny w systemie.
w Otwórz plik do zapisu. Jeśli plik jest w trybie do zapisu, tworzony jest nowy plik, jeśli plik w ogóle nie istnieje. Jeśli plik jest już obecny w systemie, wszystkie dane w pliku są obcinane i otwierane do celów zapisu.
za Otwórz plik w trybie dołączania. Jeśli plik jest w trybie dołączania, plik jest otwierany. Zawartość pliku nie zmienia się.
r + otwarte do czytania i pisania od początku
w + otwarte do czytania i pisania, nadpisywanie pliku
a + otwarte do czytania i pisania, dołączanie do pliku

W podanej składni nazwa pliku i tryb są określane jako ciągi, dlatego muszą być zawsze ujęte w podwójne cudzysłowy.

Przykład:

#include int main() {FILE *fp;fp = fopen ("data.txt", "w");}

Wynik:

Plik jest tworzony w tym samym folderze, w którym zapisałeś swój kod.

Możesz określić ścieżkę, w której chcesz utworzyć plik

#include int main() {FILE *fp;fp = fopen ("D://data.txt", "w");}

Jak zamknąć plik

Należy zawsze zamykać plik po zakończeniu operacji na pliku. Oznacza to, że zawartość i linki do pliku zostały usunięte. Zapobiega to przypadkowemu uszkodzeniu pilnika.

„C” udostępnia funkcję fclose do wykonywania operacji zamykania pliku. Składnia fclose jest następująca:

fclose (file_pointer);

Przykład:

FILE *fp;fp = fopen ("data.txt", "r");fclose (fp);

Funkcja fclose przyjmuje jako argument wskaźnik pliku. Plik powiązany ze wskaźnikiem pliku jest następnie zamykany za pomocą funkcji fclose. Zwraca 0, jeśli zamknięcie się powiodło i EOF (koniec pliku), jeśli wystąpił błąd podczas zamykania pliku.

Po zamknięciu pliku ten sam wskaźnik pliku może być również używany z innymi plikami.

W programowaniu „C” pliki są automatycznie zamykane po zakończeniu programu. Ręczne zamykanie pliku przez napisanie funkcji fclose jest dobrą praktyką programistyczną.

Zapisywanie do pliku

W C, kiedy piszesz do pliku, znaki nowego wiersza „\ n” muszą być jawnie dodane.

Biblioteka stdio oferuje niezbędne funkcje do zapisu do pliku:

  • fputc (char, file_pointer) : Zapisuje znak do pliku wskazywanego przez file_pointer.
  • fputs (str, file_pointer) : Zapisuje ciąg do pliku wskazywanego przez file_pointer.
  • fprintf (file_pointer, str, variable_lists) : Drukuje ciąg do pliku wskazywanego przez file_pointer. Ciąg może opcjonalnie zawierać specyfikatory formatu i listę zmiennych lista_zmiennych.

Poniższy program pokazuje, jak wykonać zapis do pliku:

Funkcja fputc ():

#include 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;}

Wynik:

Powyższy program zapisuje pojedynczy znak do pliku fputc_test.txt , aż osiągnie następny symbol linii "\ n", co oznacza, że ​​zdanie zostało pomyślnie napisane. Proces polega na pobraniu każdego znaku tablicy i zapisaniu go w pliku.

  1. W powyższym programie utworzyliśmy i otworzyliśmy plik o nazwie fputc_test.txt w trybie zapisu i zadeklarowaliśmy nasz ciąg znaków, który zostanie zapisany do pliku.
  2. Wykonujemy operację zapisu znak po znaku za pomocą pętli for i umieszczamy każdy znak w naszym pliku do momentu napotkania znaku "\ n", a następnie plik jest zamykany za pomocą funkcji fclose.

Funkcja fputs ():

#include 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);}

WYNIK:

  1. W powyższym programie utworzyliśmy i otworzyliśmy plik o nazwie fputs_test.txt w trybie zapisu.
  2. Po wykonaniu operacji zapisu za pomocą funkcji fputs (), pisząc trzy różne ciągi
  3. Następnie plik jest zamykany za pomocą funkcji fclose.

Funkcja fprintf ():

#include 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;}

WYNIK:

  1. W powyższym programie utworzyliśmy i otworzyliśmy plik o nazwie fprintf_test.txt w trybie zapisu.
  2. Po wykonaniu operacji zapisu za pomocą funkcji fprintf () poprzez zapisanie ciągu znaków, plik jest zamykany za pomocą funkcji fclose.

Odczytywanie danych z pliku

Istnieją trzy różne funkcje przeznaczone do odczytu danych z pliku

  • fgetc (file_pointer): Zwraca następny znak z pliku wskazywanego przez wskaźnik pliku. Po osiągnięciu końca pliku EOF jest odsyłany.
  • fgets (buffer, n, file_pointer): Odczytuje n-1 znaków z pliku i zapisuje ciąg w buforze, w którym znak NULL '\ 0' jest dodawany jako ostatni znak.
  • fscanf (file_pointer, conversion_specifiers, variable_adresses) : Służy do analizowania i analizowania danych. Odczytuje znaki z pliku i przypisuje dane wejściowe do listy wskaźników zmiennych adresy_zmienne przy użyciu specyfikatorów konwersji. Należy pamiętać, że podobnie jak w przypadku scanf, fscanf przestaje czytać łańcuch, gdy napotka spację lub znak nowej linii.

Poniższy program demonstruje odczyt z pliku fputs_test.txt przy użyciu odpowiednio funkcji fgets (), fscanf () i fgetc ():

#include 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 pointerchar 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 pointerwhile ((c = getc(file_pointer)) != EOF) printf("%c", c);fclose(file_pointer);return 0;}

Wynik:

----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

  1. W powyższym programie otworzyliśmy plik o nazwie „fprintf_test.txt”, który został wcześniej napisany za pomocą funkcji fprintf () i zawiera ciąg znaków „Learning C with Guru99”. Czytamy to za pomocą funkcji fgets (), która czyta wiersz po wierszu, gdzie rozmiar bufora musi być wystarczający, aby obsłużyć całą linię.
  2. Ponownie otwieramy plik, aby zresetować plik wskaźnika, aby wskazywał początek pliku. Utwórz różne zmienne łańcuchowe, aby osobno obsługiwać każde słowo. Wydrukuj zmienne, aby zobaczyć ich zawartość. Funkcja fscanf () służy głównie do wyodrębniania i analizowania danych z pliku.
  3. Otwórz ponownie plik, aby zresetować plik wskaźnika tak, aby wskazywał początek pliku. Odczytaj dane i wydrukuj je z pliku znak po znaku za pomocą funkcji getc (), aż do napotkania instrukcji EOF
  4. Po wykonaniu odczytu pliku operacji przy użyciu różnych wariantów, ponownie zamknęliśmy plik za pomocą funkcji fclose.

Interaktywny odczyt i zapis plików za pomocą getc i putc

To są najprostsze operacje na plikach. Getc oznacza get character, a putc oznacza put character. Te dwie funkcje są używane do obsługi tylko jednego znaku naraz.

Poniższy program demonstruje funkcje obsługi plików w programowaniu w języku C:

#include int main() {FILE * fp;char c;printf("File Handling\n");//open a filefp = fopen("demo.txt", "w");//writing operationwhile ((c = getchar()) != EOF) {putc(c, fp);}//close filefclose(fp);printf("Data Entered:\n");//readingfp = fopen("demo.txt", "r");while ((c = getc(fp)) != EOF) {printf("%c", c);}fclose(fp);return 0;}

Wynik:

  1. W powyższym programie stworzyliśmy i otworzyliśmy plik o nazwie demo w trybie zapisu.
  2. Po wykonaniu operacji zapisu plik jest zamykany za pomocą funkcji fclose.
  3. Ponownie otworzyliśmy plik, który zawiera teraz dane w trybie odczytu. Pętla while będzie wykonywana do momentu znalezienia eof. Po znalezieniu końca pliku operacja zostanie zakończona, a dane zostaną wyświetlone za pomocą funkcji printf.
  4. Po wykonaniu operacji odczytu plik jest ponownie zamykany za pomocą funkcji fclose.

Podsumowanie

  • Plik to miejsce w pamięci, w którym przechowywane są dane.
  • Programowanie w języku „C” udostępnia różne funkcje do obsługi pliku.
  • Mechanizm manipulowania plikami nazywa się zarządzaniem plikami.
  • Plik należy otworzyć przed wykonaniem na nim operacji.
  • Plik można otworzyć w trybie do odczytu, zapisu lub dołączania.
  • Funkcje Getc i putc służą do odczytu i zapisu pojedynczego znaku.
  • Funkcja fscanf () umożliwia odczyt i analizę danych z pliku
  • Możemy odczytać (używając funkcji getc ) cały plik, wykonując pętlę, aby zakryć cały plik, aż do napotkania EOF
  • Do pliku możemy pisać po utworzeniu jego nazwy, używając funkcji fprintf () i musi on mieć znak nowej linii na końcu tekstu napisu.