Napisz plik binarny w C++

Napisz Plik Binarny W C



W programowaniu w C++ obsługa plików binarnych ma fundamentalne znaczenie dla przechowywania surowych danych i manipulowania nimi. Niezależnie od tego, czy pracujesz z obrazami, plikami audio, czy niestandardowymi strukturami danych, umiejętność wydajnego zapisywania plików binarnych ma kluczowe znaczenie. Pliki binarne przechowują dane w formacie nieczytelnym dla człowieka, dzięki czemu nadają się do różnych zastosowań, takich jak przechowywanie złożonych struktur, obrazów lub wszelkich danych, które nie są zgodne z prostą reprezentacją tekstową.

C++ udostępnia bibliotekę do interakcji z plikami binarnymi, w szczególności z klasą „ofstream”, w celu zapisywania danych binarnych. Ta funkcja umożliwia programistom bezproblemowe tworzenie, modyfikowanie i zarządzanie plikami binarnymi. W tym artykule omówiono różne metody i techniki pisania plików binarnych w języku C++, rzucając światło na ich zastosowania i przypadki użycia.

Napisz plik binarny w języku C++

Aby zapisać dane w pliku binarnym przy użyciu języka C++, stosuje się metodę write(). Funkcja ta zapisuje określoną liczbę bajtów do wyznaczonego strumienia, zaczynając od lokalizacji wskaźnika „put”. Jeśli wskaźnik „put” znajduje się na końcu, plik jest rozszerzany. Jednakże nowe dane zastępują istniejące znaki, jeśli wskaźnik znajduje się w pliku. W przypadku wystąpienia błędu podczas zapisu, strumień jest oznaczany jako będący w stanie błędu. Przejdźmy teraz do przykładów, aby dowiedzieć się, jak pisać w pliku binarnym przy użyciu prostych i wbudowanych funkcji C++.







Metoda 1: Zapisywanie plików binarnych z danymi strukturalnymi

W wielu przypadkach może być konieczne zapisanie danych strukturalnych, takich jak struktury niestandardowe, do pliku binarnego. Rozważmy przykład zawierający zapis osoby, który zawiera imię i nazwisko, wzrost i wiek osoby. Zobacz następujący podany kod i spójrz na wyjaśnienie:



#include

#include

struktura Osoba {

zwęglać nazwa [ pięćdziesiąt ] ;

wew wiek ;

podwójnie wysokość ;

} ;

wew główny ( ) {

st :: poza strumieniem plik wyjściowy ( „ludzie.bin” , st :: iOS :: dwójkowy ) ;

Jeśli ( ! plik wyjściowy. jest otwarte ( ) ) {

st :: cer << „Błąd! Nie można otworzyć pliku do zapisu!” << st :: koniec ;

powrót 1 ;

}

Osoba Osoba 1 = { „Kalsoom Ilyas” , 25 , 1,75 } ;

Osoba Osoba 2 = { „Kalsoom Bajwa” , 30 , 1,68 } ;

plik wyjściowy. pisać ( reinterpretuj_cast < zwęglać *> ( & osoba 1 ) , rozmiar ( osoba 1 ) ) ;

plik wyjściowy. pisać ( reinterpretuj_cast < zwęglać *> ( & osoba2 ) , rozmiar ( osoba2 ) ) ;

plik wyjściowy. zamknąć ( ) ;

st :: cout << „Rekord osoby został pomyślnie zapisany w pliku binarnym.” << st :: koniec ;

powrót 0 ;

}

Oto podział kodu z konkretnymi szczegółami. Program rozpoczyna się od zdefiniowania własnej struktury o nazwie „Osoba”. Zawiera trzy pola: imię, wiek i wzrost. Szczegóły tych pól są następujące:



  • nazwa: Ciąg znaków do przechowywania imienia i nazwiska osoby (do 50 znaków)
  • wiek: Liczba całkowita przechowująca wiek osoby
  • wysokość: Double do przechowywania wzrostu osoby

Po zdefiniowaniu struktury „Osoba” uruchamiana jest funkcja główna będąca punktem wejścia do programu. Pierwsza linia programu głównego otwiera plik o nazwie „people.bin”. Używamy „std::ofstream”, aby utworzyć plik o nazwie „people.bin” do zapisywania danych w formacie binarnym. Bardzo ważne jest sprawdzenie, czy plik otwiera się pomyślnie. W przeciwnym razie zostanie wyświetlony komunikat o błędzie i program zostanie zatrzymany. Dlatego za pomocą warunku „if” i funkcji is_open() sprawdzamy, czy plik otworzył się pomyślnie, czy nie.





Tutaj tworzone są dwa obiekty „Osoba”. Definiujemy dwie zmienne „osoba1” i „osoba2” typu „Osoba”. Przypisujemy zmienne wartości nazwy, wieku i wzrostu dla „Kalsoom Ilyas” i „Kalsoom Bajwa”.

Teraz, gdy mamy dane do zapisania w pliku binarnym, wykonajmy właściwą funkcję za pomocą funkcji write(). Używamy „outFile.write” do zapisania zawartości każdego obiektu „Person” do pliku. Funkcje „reinterpret_cast(&person1)” i „reinterpret_cast(&person2)” konwertują całą strukturę „Person” (wraz ze wszystkimi jej polami) na ciągły strumień bajtów odpowiedni do zapisu do pliku binarnego . Rozmiar każdego obiektu „Person” zapisujemy za pomocą „sizeof(person1)” i „sizeof(person2)”, aby mieć pewność, że wszystkie dane zostaną zapisane poprawnie.



Po zapisaniu danych do pliku bardzo ważne jest jego prawidłowe zamknięcie, aby żadne dane nie uległy utracie w wyniku jakiejkolwiek innej funkcji. Używamy metody outFile.close(), aby zwolnić zasoby powiązane z plikiem i zapewnić poprawność zapisu danych. Na koniec drukujemy komunikat potwierdzający pomyślny zapis danych do pliku binarnego.

Jeśli wyjaśnimy ten przykład prościej, wyobraźmy sobie specjalny notatnik, w którym można przechowywać informacje o ludziach jedynie w tajnym języku. Kod ten tworzy schemat organizowania informacji (imię, wiek, wzrost). Otwiera notatnik, wypełnia profile dwóch osób, tłumaczy informacje na tajny język i starannie je wpisuje. Następnie bezpiecznie zamyka notebook, zachowując profile do wykorzystania w przyszłości. Zapoznaj się z wynikami programu podanymi na poniższym zrzucie ekranu:

Metoda 2: Zapisywanie liczb całkowitych do pliku binarnego

W tej metodzie tablica liczb całkowitych jest zapisywana w pliku binarnym o nazwie „integers.bin”. „reinterpret_cast” traktuje tablicę liczb całkowitych jako ciąg znaków (bajtów) do zapisania w pliku. Jest to szczególnie ważne, ponieważ pliki binarne przetwarzają surowe dane bajtowe. Rzućmy okiem na następujący prosty przykład:

#include

#include

wew główny ( ) {

st :: poza strumieniem plik wyjściowy ( 'liczby całkowite.bin' , st :: iOS :: dwójkowy ) ;

Jeśli ( ! plik wyjściowy. jest otwarte ( ) ) {

st :: cer << „Błąd! Nie można otworzyć pliku do zapisu!” << st :: koniec ;

powrót 1 ;

}

wew liczby [ ] = { 42 , 99 , - 1 , 0 } ;

plik wyjściowy. pisać ( reinterpretuj_cast < zwęglać *> ( liczby ) , rozmiar ( liczby ) ) ;

plik wyjściowy. zamknąć ( ) ;

st :: cout << „Podane liczby całkowite pomyślnie zapisano do pliku binarnego.” << st :: koniec ;

powrót 0 ;

}

Oto podział kodu z konkretnymi szczegółami:

„#include ” i „#include ” udostępniają narzędzia niezbędne do pracy z plikami i drukowania komunikatów, takie jak odpowiednio cin i write(). Plik „std::ofstream outFile („integers.bin”, std::ios::binary);” otwiera plik binarny o nazwie „integers.bin”, w którym można przechowywać liczby wyłącznie w tajnym kodzie (format binarny). Sprawdza, czy plik jest otwarty. W przeciwnym razie zostanie wyświetlony komunikat o błędzie.

Następna linia to „int number[] = {42, 99, -1, 0};” definiuje tablicę o nazwie „numbers” zawierającą liczby całkowite 42, 99, -1 i 0. „outFile.write(reinterpret_cast(numbers), sizeof(numbers));” dokładnie tłumaczy liczby całkowite na format binarny i zapisuje je w pliku „integer.bin”. Plik „outFile.close();” zamyka plik poprawnie, aby zapewnić bezpieczeństwo i porządek liczb całkowitych. Na koniec drukowany jest komunikat potwierdzający, że liczby całkowite zostały pomyślnie zapisane w pliku binarnym. Aby zobaczyć wynik, zapoznaj się z następującymi wynikami tego programu:

Wniosek

Pisanie plików binarnych w C++ jest kluczową umiejętnością pozwalającą na efektywną obsługę różnych typów danych. Podczas tej eksploracji pisania plików binarnych w C++ dowiedzieliśmy się, jak można wykorzystać klasę „ofstream” do wydajnej obsługi danych binarnych. Niezależnie od tego, czy mamy do czynienia z prostymi liczbami całkowitymi, czy danymi strukturalnymi przy użyciu niestandardowych struktur, proces ten obejmuje otwarcie strumienia pliku, zapisanie danych w formacie binarnym, a następnie zamknięcie pliku. Ta możliwość zapewnia programistom C++ elastyczność pracy z różnorodną gamą binarnych typów danych, przyczyniając się do wszechstronności języka w aplikacjach, od programowania na poziomie systemu po przetwarzanie multimediów.