C++ Manipulace se soubory: Jak otevírat, zapisovat, číst, zavírat soubory v C++

V čem je manipulace se soubory C++?

Soubory trvale ukládají data do úložného zařízení. Při práci se soubory lze výstup z programu uložit do souboru. V souboru lze s daty provádět různé operace.

Proud je abstrakce zařízení, kde se provádějí vstupní/výstupní operace. Proud můžete reprezentovat buď jako cíl, nebo jako zdroj znaků neurčité délky. To bude určeno jejich použitím. C++ vám poskytuje knihovnu, která přichází s metodami pro práci se soubory. Pojďme to probrat.

Knihovna fstream

Knihovna fstream poskytuje C++ programátory se třemi třídami pro práci se soubory. Tyto třídy zahrnují:

  • ofstream– Tato třída představuje výstupní proud. Používá se pro vytváření souborů a zápis informací do souborů.
  • ifstream– Tato třída představuje vstupní proud. Používá se pro čtení informací z datových souborů.
  • fstream– Tato třída obecně představuje proud souborů. Dodává se s funkcemi ofstream/ifstream. To znamená, že je schopen vytvářet soubory, zapisovat do souborů, číst z datových souborů.

Následující obrázek usnadňuje pochopení:

knihovna fstream
knihovna fstream

Chcete-li použít výše uvedené třídy knihovny fstream, musíte je zahrnout do svého programu jako soubor záhlaví. Samozřejmě použijete direktivu #include preprocessor. Musíte také zahrnout soubor záhlaví iostream.

Jak otevřít soubory

Před provedením jakékoli operace se souborem jej musíte nejprve otevřít. Pokud potřebujete do souboru zapisovat, otevřete jej pomocí objektů fstream nebo ofstream. Pokud potřebujete ze souboru pouze číst, otevřete jej pomocí objektu ifstream.

Tyto tři objekty, tedy fstream, ofstream a ifstream, mají v sobě definovanou funkci open(). Funkce má tuto syntaxi:

open (file_name, mode);
  • Parametr file_name označuje název souboru, který se má otevřít.
  • Parametr režimu je volitelný. Může nabývat libovolné z následujících hodnot:
Hodnota Description
ios:: aplikace Režim Append. Výstup odeslaný do souboru je k němu připojen.
ios::ate Otevře soubor pro výstup a poté přesune ovládací prvek čtení a zápisu na konec souboru.
ios::in Otevře soubor pro čtení.
ios::out Otevře soubor pro zápis.
ios::trunc Pokud soubor existuje, měly by být prvky souboru před jeho otevřením zkráceny.

Je možné používat dva režimy současně. Kombinujete je pomocí | (OR) operátor.

Příklad 1:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file.close(); 
	}
	return 0;
}

Výstup:

Otevřete soubory

Zde je snímek obrazovky kódu:

Otevřete soubory

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do programu hlavičkový soubor iostream.
  2. Chcete-li používat jeho třídy, zahrňte do programu hlavičkový soubor fstream.
  3. Zahrňte do našeho kódu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
  4. Zavolejte funkci main(). Logika programu by měla jít do jeho těla.
  5. Vytvořte objekt třídy fstream a pojmenujte jej my_file.
  6. Použijte funkci open() na výše uvedený objekt a vytvořte nový soubor. Režim out nám umožňuje zapisovat do souboru.
  7. Použijte příkaz if ke kontrole, zda se vytvoření souboru nezdařilo.
  8. Zpráva k vytištění na konzole, pokud soubor nebyl vytvořen.
  9. Konec těla příkazu if.
  10. Pomocí příkazu else uveďte, co dělat, pokud byl soubor vytvořen.
  11. Zpráva k vytištění na konzole, pokud byl soubor vytvořen.
  12. Aplikujte na objekt funkci close() a zavřete soubor.
  13. Konec těla příkazu else.
  14. Pokud se program úspěšně dokončí, musí vrátit hodnotu.
  15. Konec těla funkce main().

Jak zavřít soubory

Jednou C++ program ukončí, automaticky

  • splachuje potoky
  • uvolní přidělenou paměť
  • zavře otevřené soubory.

Jako programátor byste se však měli naučit zavírat otevřené soubory před ukončením programu.

Objekty fstream, ofstream a ifstream mají funkci close() pro uzavírání souborů. Funkce má tuto syntaxi:

void close();

Jak zapisovat do souborů

Do souboru můžete zapisovat přímo z vašeho C++ naprogramovat. K tomu použijte operátor vložení proudu (<<). Text, který má být zapsán do souboru, by měl být uzavřen do dvojitých uvozovek.

Pojďme si to ukázat.

Příklad 2:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file << "Guru99";
		my_file.close();
	}
	return 0;
}

Výstup:

Jak zapisovat do souborů

Zde je snímek obrazovky kódu:

Jak zapisovat do souborů

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do programu hlavičkový soubor iostream.
  2. Chcete-li používat jeho třídy, zahrňte do programu hlavičkový soubor fstream.
  3. Zahrňte do programu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
  4. Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
  5. Vytvořte instanci třídy fstream a pojmenujte ji my_file.
  6. Pomocí funkce open() vytvořte nový soubor s názvem muj_soubor.txt. Soubor se otevře v režimu out pro zápis do něj.
  7. Pomocí příkazu if zkontrolujte, zda nebyl soubor otevřen.
  8. Text, který se má vytisknout na konzole, pokud soubor není otevřen.
  9. Konec těla příkazu if.
  10. Pomocí příkazu else uveďte, co dělat, pokud byl soubor vytvořen.
  11. Text, který se má vytisknout na konzole, pokud byl soubor vytvořen.
  12. Napište nějaký text do vytvořeného souboru.
  13. K uzavření souboru použijte funkci close().
  14. Konec těla příkazu else.
  15. Program musí po úspěšném dokončení vrátit hodnotu.
  16. Konec těla funkce main().

Jak číst ze souborů

Můžete číst informace ze souborů do svého C++ naprogramovat. To je možné pomocí operátoru extrakce proudu (>>). Operátor používáte stejným způsobem, jakým jej používáte ke čtení uživatelského vstupu z klávesnice. Místo použití objektu cin však použijete objekt ifstream/fstream.

Příklad 3:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::in);
	if (!my_file) {
		cout << "No such file";
	}
	else {
		char ch;

		while (1) {
			my_file >> ch;
			if (my_file.eof())
				break;

			cout << ch;
		}

	}
	my_file.close();
	return 0;
}

Výstup:

Číst ze souborů

Žádný takový soubor

Zde je snímek obrazovky kódu:

Číst ze souborů

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte do programu hlavičkový soubor iostream.
  2. Chcete-li používat jeho třídy, zahrňte do programu hlavičkový soubor fstream.
  3. Zahrňte do programu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
  4. Zavolejte funkci main(). Programová logika by měla být přidána do těla této funkce.
  5. Vytvořte instanci třídy fstream a pojmenujte ji my_file.
  6. Pomocí funkce open() vytvořte nový soubor s názvem muj_soubor.txt. Soubor se otevře v režimu in pro čtení z něj.
  7. Pomocí příkazu if zkontrolujte, zda soubor neexistuje.
  8. Text, který se má vytisknout na konzole, pokud není soubor nalezen.
  9. Konec těla příkazu if.
  10. Pomocí příkazu else uveďte, co dělat, pokud je soubor nalezen.
  11. Vytvořit proměnná char jménem ch.
  12. Vytvořit zatímco smyčka pro iteraci obsahu souboru.
  13. Zapište/uložte obsah souboru do proměnné ch.
  14. Použijte podmínku if a funkci eof(), což je konec souboru, abyste zajistili, že kompilátor bude pokračovat ve čtení ze souboru, pokud není dosaženo konce.
  15. Použijte příkaz break k zastavení čtení ze souboru, jakmile je dosaženo konce.
  16. Vytiskněte obsah proměnné ch na konzoli.
  17. Tělo na konci chvíle.
  18. Konec těla příkazu else.
  19. Voláním funkce close() soubor zavřete.
  20. Program musí po úspěšném dokončení vrátit hodnotu.
  21. Konec těla funkce main().

Shrnutí

  • Při práci se soubory lze výstup programu odeslat a uložit do souboru.
  • V souboru pak lze s daty použít řadu operací.
  • Proud je abstrakce, která představuje zařízení, kde se provádějí vstupní/výstupní operace.
  • Proud může být reprezentován buď jako cíl, nebo jako zdroj znaků neurčité délky.
  • Knihovna fstream poskytuje C++ programátory s metodami pro práci se soubory.
  • Chcete-li knihovnu používat, musíte ji zahrnout do svého programu pomocí direktivy #include preprocessor.