Programowanie komputerowe - We / wy plików
Pliki komputerowe
Plik komputerowy służy do przechowywania danych w formacie cyfrowym, takich jak zwykły tekst, dane obrazu lub inne treści. Pliki komputerowe mogą być organizowane w różnych katalogach. Pliki służą do przechowywania danych cyfrowych, podczas gdy katalogi są używane do przechowywania plików.
Pliki komputerowe można uznać za cyfrowy odpowiednik dokumentów papierowych. Podczas programowania przechowujesz kod źródłowy w plikach tekstowych z różnymi rozszerzeniami, na przykład pliki programowania C kończą się rozszerzeniem.c, Pliki programowania Java z .javai Python z plikami .py.
Wejście / wyjście pliku
Zwykle tworzysz pliki za pomocą edytorów tekstu, takich jak notatnik, MS Word, MS Excel lub MS Powerpoint itp. Jednak często musimy tworzyć pliki również za pomocą programów komputerowych. Możemy zmodyfikować istniejący plik za pomocą programu komputerowego.
Plik wejściowy oznacza dane, które są zapisywane w pliku, a wyjście pliku oznacza dane odczytywane z pliku. W rzeczywistości terminy wejścia i wyjścia są bardziej związane z wejściem i wyjściem ekranu. Kiedy wyświetlamy wynik na ekranie, nazywa się to wyjściem. Podobnie, jeśli wprowadzimy dane wejściowe do naszego programu z wiersza poleceń, nazywa się to danymi wejściowymi.
Na razie wystarczy pamiętać, że zapis do pliku jest wejściem do pliku, a odczytanie czegoś z pliku jest wyjściem do pliku.
Tryby operacji na plikach
Zanim zaczniemy pracę z jakimkolwiek plikiem za pomocą programu komputerowego, musimy albo utworzyć nowy plik, jeśli nie istnieje, albo otworzyć już istniejący plik. W obu przypadkach możemy otworzyć plik w następujących trybach -
Read-Only Mode- Jeśli masz zamiar po prostu odczytać istniejący plik i nie chcesz zapisywać dalszej treści w pliku, otworzysz plik w trybie tylko do odczytu. Prawie wszystkie języki programowania zapewniają składnię otwierania plików w trybie tylko do odczytu.
Write-Only Mode- Jeśli zamierzasz pisać do istniejącego pliku lub nowo utworzonego pliku, ale nie chcesz czytać żadnej zapisanej zawartości z tego pliku, otworzysz plik w trybie tylko do zapisu. Wszystkie języki programowania zapewniają składnię otwierania plików w trybie tylko do zapisu.
Read & Write Mode - Jeśli masz zamiar czytać i zapisywać w tym samym pliku, otworzysz plik w trybie odczytu i zapisu.
Append Mode- Kiedy otwierasz plik do zapisu, umożliwia rozpoczęcie zapisu od początku pliku; jednak zastąpi istniejącą zawartość, jeśli taka istnieje. Załóżmy, że nie chcemy nadpisywać żadnej istniejącej zawartości, a następnie otwieramy plik w trybie dołączania. Tryb dołączania jest ostatecznie trybem zapisu, który umożliwia dołączanie treści na końcu pliku. Prawie wszystkie języki programowania zapewniają składnię do otwierania plików w trybie dopisywania.
W następnych sekcjach dowiemy się, jak otworzyć nowy nowy plik, jak do niego pisać, a później, jak czytać i dołączać więcej treści do tego samego pliku.
Otwieranie plików
Możesz użyć fopen()funkcja, aby utworzyć nowy plik lub otworzyć istniejący plik. To wywołanie zainicjuje obiekt typuFILE, który zawiera wszystkie informacje niezbędne do sterowania strumieniem. Oto prototyp, tj. Sygnatura tego wywołania funkcji -
FILE *fopen( const char * filename, const char * mode );
Tutaj, filename to literał łańcuchowy, którego użyjesz do nazwania pliku i uzyskania do niego dostępu mode może mieć jedną z następujących wartości -
Sr.No | Tryb i opis |
---|---|
1 |
r Otwiera istniejący plik tekstowy do odczytu. |
2 |
w Otwiera plik tekstowy do zapisu. Jeśli nie istnieje, tworzony jest nowy plik. Tutaj twój program zacznie zapisywać zawartość od początku pliku. |
3 |
a Otwiera plik tekstowy do pisania w trybie dołączania. Jeśli nie istnieje, tworzony jest nowy plik. Tutaj Twój program rozpocznie dołączanie zawartości do istniejącej zawartości pliku. |
4 | r+ Otwiera plik tekstowy do odczytu i zapisu obu. |
5 |
w+ Otwiera plik tekstowy do czytania i pisania. Najpierw skraca plik do zerowej długości, jeśli istnieje; w przeciwnym razie tworzy plik, jeśli nie istnieje. |
6 |
a+ Otwiera plik tekstowy do czytania i pisania. Tworzy plik, jeśli nie istnieje. Czytanie rozpocznie się od początku, ale tekst można tylko dołączyć. |
Zamykanie pliku
Aby zamknąć plik, użyj rozszerzenia fclose( )funkcjonować. Prototypem tej funkcji jest -
int fclose( FILE *fp );
Plik fclose( ) funkcja zwraca zero po pomyślnym zakończeniu lub EOF, znak specjalny, jeśli wystąpił błąd podczas zamykania pliku. Ta funkcja w rzeczywistości opróżnia wszystkie dane wciąż oczekujące w buforze do pliku, zamyka plik i zwalnia pamięć używaną przez plik. EOF to stała zdefiniowana w pliku nagłówkowymstdio.h.
Biblioteka standardowa C udostępnia różne funkcje do odczytu i zapisu pliku znak po znaku lub w postaci łańcucha o stałej długości. Zobaczmy kilka z nich w następnej sekcji.
Pisanie pliku
Poniżej podano najprostszą funkcję do zapisywania pojedynczych znaków w strumieniu -
int fputc( int c, FILE *fp );
Funkcja fputc() zapisuje wartość znakową argumentu c do strumienia wyjściowego, do którego odwołuje się fp. W przeciwnym razie zwraca znak zapisany w przypadku sukcesuEOFjeśli jest błąd. Możesz użyć następujących funkcji, aby zapisać w strumieniu ciąg zakończony znakiem null -
int fputs( const char *s, FILE *fp );
Funkcja fputs() zapisuje ciąg sdo pliku, do którego odwołuje się fp. W przeciwnym razie zwraca nieujemną wartość w przypadku sukcesuEOFjest zwracany w przypadku jakiegokolwiek błędu. Możesz także użyć funkcjiint fprintf(FILE *fp,const char *format, ...)zapisanie ciągu znaków do pliku. Wypróbuj następujący przykład -
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
fclose(fp);
}
Kiedy powyższy kod jest kompilowany i wykonywany, tworzy nowy plik test.txt w /tmpkatalog i zapisuje dwie linie przy użyciu dwóch różnych funkcji. Przeczytajmy ten plik w następnej sekcji.
Czytanie pliku
Poniżej podano najprostszą funkcję odczytującą plik tekstowy znak po znaku -
int fgetc( FILE * fp );
Plik fgetc() funkcja odczytuje znak z pliku wejściowego, do którego odwołuje się fp. Wartość zwracana to odczytany znak; lub w przypadku jakiegokolwiek błędu zwracaEOF. Poniższa funkcja umożliwia odczytanie ciągu znaków ze strumienia -
char *fgets( char *buf, int n, FILE *fp );
Funkcja fgets() odczytuje do n - 1 znaków ze strumienia wejściowego, do którego odwołuje się fp. Kopiuje odczytany ciąg do buforabuf, dołączając plik null znak, aby zakończyć ciąg.
Jeśli ta funkcja napotka znak nowego wiersza „\ n” lub EOF przed odczytaniem maksymalnej liczby znaków, zwraca tylko znaki odczytane do tego momentu, w tym znak nowego wiersza. Możesz także użyćint fscanf(FILE *fp, const char *format, ...) aby odczytać łańcuchy z pliku, ale przestaje czytać po napotkaniu pierwszego znaku spacji.
#include <stdio.h>
main() {
FILE *fp;
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);
}
Gdy powyższy kod jest kompilowany i wykonywany, odczytuje plik utworzony w poprzedniej sekcji i generuje następujący wynik -
1 : This
2 : is testing for fprintf...
3 : This is testing for fputs...
Przeanalizujmy, co się tutaj wydarzyło. Po pierwszefscanf() czyta metody Thisponieważ po tym napotkał spację. Drugi telefon jest dlafgets(), który czyta pozostałą linię, aż napotka koniec linii. Wreszcie ostatnia rozmowafgets() czyta w całości drugą linię.
We / wy plików w Javie
Java zapewnia jeszcze bogatszy zestaw funkcji do obsługi operacji we / wy plików. Aby uzyskać więcej informacji na ten temat, zalecamy zapoznanie się z naszymi samouczkami dotyczącymi języka Java.
Tutaj zobaczymy prosty program w języku Java, który jest odpowiednikiem opisanego powyżej programu w C. Ten program otworzy plik tekstowy, zapisze do niego kilka wierszy tekstu i zamknie plik. Na koniec ten sam plik jest otwierany, a następnie odczytywany z już utworzonego pliku. Możesz spróbować uruchomić następujący program, aby zobaczyć dane wyjściowe -
import java.io.*;
public class DemoJava {
public static void main(String []args) throws IOException {
File file = new File("/tmp/java.txt");
// Create a File
file.createNewFile();
// Creates a FileWriter Object using file object
FileWriter writer = new FileWriter(file);
// Writes the content to the file
writer.write("This is testing for Java write...\n");
writer.write("This is second line...\n");
// Flush the memory and close the file
writer.flush();
writer.close();
// Creates a FileReader Object
FileReader reader = new FileReader(file);
char [] a = new char[100];
// Read file content in the array
reader.read(a);
System.out.println( a );
// Close the file
reader.close();
}
}
Kiedy powyższy program jest wykonywany, daje następujący wynik -
This is testing for Java write...
This is second line...
We / wy pliku w Pythonie
Poniższy program pokazuje tę samą funkcjonalność, aby otworzyć nowy plik, zapisać do niego zawartość i na koniec przeczytać ten sam plik -
# Create a new file
fo = open("/tmp/python.txt", "w")
# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");
# Close the file
fo.close()
# Open existing file
fo = open("/tmp/python.txt", "r")
# Read file content in a variable
str = fo.read(100);
print str
# Close opened file
fo.close()
Wykonanie powyższego kodu daje następujący wynik -
This is testing for Python write...
This is second line...