Obsługa plików dyskowych w C++ - file handling - zapis i odczyt prostych plików tekstowych i binarnych.
Określenie protokołu połączenia - sposobu komunikowania się z napędem na którym zapisujemy bądź z którego odczytujemy plik, czyli otwieranie pliku do zapisu lub odczytu:
fstream fout ( filename, mode ) ;
klasa (strumień do/z pliku) ścieżka dostępu do pliku tryb obsługi pliku
otwarcie pliku do zapisu fout lub do odczytu fin
(dla fout jeśli plik nie istnieje utworzenie pliku i otwarcie go zapisu)
filename np. “C:\\plik.txt”
mode ios :: out (tryb zapisu), ios :: in (tryb odczytu)
np.
fstream fout (“C:\\plik.txt”, ios :: out ) ; // otwarcie pliku plik.txt do zapisu w trybie tekstowym (ios :: text - tryb domyślny)
fstream fout (“C:\\plik.dat”, ios :: out | ios :: binary ) ; // otwarcie pliku plik.dat zapisu w trybie
binarnym
fstream fin (“C:\\plik.txt”, ios :: in ) ; // otwarcie pliku plik.txt do odczytu w trybie tekstowym
fstream fin (“C:\\plik.dat ios :: in | ios :: binary ) ; // otwarcie pliku plik.dat odczytu w trybie
binarnym
Zapisywanie lub odczytywanie danych z otwartego pliku:
fout - plikowy strumień wyjścia używając operatora << umieszczamy w strumieniu dane
np. cin >> x ; //przypisanie zmiennej x wartości wprowadzonej z klawiatury
fout << x ; //następnie zapisanie wartości zmiennej x do pliku
fin - plikowy strumień wejścia używając operatora >> umieszczamy w strumieniu dane
np. fin >> x ; //przypisanie zmiennej x wartości odczytanej z pliku
cout << x ; //następnie wydrukowanie wartości zmiennej x na ekranie monitora
Zamykanie pliku po zapisie w nim lub odczycie z niego danych, czynność konieczna aby nie utracić zawartości pliku:
fout . close ( ) ; //zamknięcie pliku otwartego do zapisu
fin . close ( ) ; //zamknięcie pliku otwartego do odczytu
Zadanie 1
Napisz program zapisujący wartości elementów wektora dziesięcioelementowego w pliku tekstowym. Wartości elementów wektora mają być wprowadzane z klawiatury.
#include <iostream>
#include <fstream>
#define M 10
using namespace std;
int main()
{
int i=0;
float f [M];
char *plik ="C:\\dane.txt"; //ścieżka dostępu do pliku
fstream fout (plik,ios::out); //utworzenie i otwarcie pliku do zapisu w trybie tekstowym
while(i<M)
{
cin>>f[i];
fout<<'\t'<<f[i];
i++;
}
fout.close(); //zamknięcie pliku otwartego do zapisu
system („PAUSE”);
return 0;
}
Zadanie 2
Napisz program odczytujący wartości z pliku tekstowego utworzonego w zadaniu 1, program ma zapisać te wartości w wektorze, a następnie obliczyć wartości pierwiastka kwadratowego elementów wektora zapisując wyniki w oddzielnym wektorze.. Wartości elementów wektora wynikowego mają być wprowadzane na ekran monitora.
#include <iostream>
#include <fstream>
#include <cmath >
#define M 10
using namespace std;
main()
{
int i=0;
float f[M],w[M];
char *plik="C:\\dane.txt"; //ścieżka dostępu do pliku
fstream fin(plik,ios::in); //otwarcie pliku do odczytu w trybie tekstowym
if (fin==0) //sprawdzenie czy plik istnieje
cout<<"Bląd otwarcia pliku !!!";
else
{
while(i<M)
{
fin>>f[i];
w[i]=sqrt(f[i]);
cout<<'\t'<<w[i]<<'\n';
i++;
}
}
fin.close(); //zamknięcie pliku otwartego do odczytu
system (“PAUSE”);
return 0;
}
Ćwiczenia laboratoryjne nr 10
„Język Programowania” str. 3