Właśnie zacząłem się zastanawiać - w jaki sposób tak naprawdę std::fstream
otwiera się z std::ios::in
i std::ios::out
faktycznie ma działać? Co powinien zrobić? Napisz coś do (na przykład) pustego pliku, a następnie przeczytaj ... co? Tylko napisana wartość? Gdzie znajdowałby się plik "wskaźnik"/"kursor"? Może odpowiedzi już tam są, ale po prostu nie mogłem tego znaleźć.W jaki sposób powinien działać std :: fstream z wejściami i wyjściami?
Odpowiedz
Co to jest std::fstream
?
std::fstream
to dwukierunkowa klasa plików strumieniowych. Oznacza to, że zapewnia interfejs dla plików wejściowych i wyjściowych. Jest powszechnie używany, gdy użytkownik musi czytać i pisać w tej samej sekwencji zewnętrznej.
Przy uruchamianiu dwukierunkowego strumienia pliku (w przeciwieństwie std::ofstream
lub std::ifstream
), przy czym openmodes ios_base::in
i ios_base::out
podano domyślnie. Oznacza to, że:
std::fstream f("test.txt", std::ios_base::in | std::ios_base::out);
jest taka sama jak
std::fstream f("test.txt");
można by określić obie opcje, jeśli musieli także dodać kilka niestandardowych openmodes takich jak trunc
, ate
, app
lub binary
. Tryb otwarty ios_base::trunc
jest potrzebny, jeśli chcesz utworzyć nowy plik dla dwukierunkowych operacji we/wy, ponieważ tryb otwarty ios_base::in
uniemożliwia utworzenie nowego pliku.
dwukierunkowe I/O
dwukierunkowe I/O jest wykorzystywanie dwukierunkowych strumienia zarówno dla wejścia i wyjścia. W IOStreamach strumienie standardowe zachowują sekwencje znaków w buforze, który służy jako źródło lub pochłaniacz danych. W przypadku strumieni wyjściowych istnieje obszar "put" (bufor przechowujący znaki dla danych wyjściowych). Podobnie, w przypadku strumieni wejściowych istnieje obszar "get".
W przypadku std::fstream
(klasa dla danych wejściowych i) zawiera bufor wspólnego pliku reprezentujący odpowiednio odpowiednio obszar get i put. Na wskaźnik pozycji, który zaznacza bieżącą pozycję w pliku, wpływają operacje wyjściowe: i. Jako takie, w celu wykonywania operacji we/wy poprawnie na dwukierunkowego strumienia, istnieją pewne zasady, których należy przestrzegać:
- Podczas wykonywania odczytu po zapisie lub odwrotnie, strumień powinien zostać przeniesiony z powrotem.
- Jeśli operacja wprowadzania trafi na koniec pliku, natychmiastowe wykonanie zapisu jest w porządku.
Dotyczy tylko std::fstream
. Powyższe zasady nie są potrzebne dla std::stringstream
.
Mam nadzieję, że odpowiedzą na twoje pytania. Jeśli masz więcej, możesz po prostu zapytać w komentarzach.
- 1. Makefile z wieloma wejściami i wyjściami
- 2. Kompilatory z wieloma wejściami i wieloma wyjściami z Shake
- 3. W jaki sposób powinien działać ten kod w module FormsAuthenticationModule?
- 4. Odzyskiwanie deskryptor pliku z std :: fstream
- 5. std :: fstream nie tworzy plik
- 6. Amazon EMR: uruchamianie niestandardowego słoika z wejściami i wyjściami z S3
- 7. Jak dołączyć do pliku z flagą fstream fstream :: app wydaje się nie działać
- 8. pliki std :: fstream więcej niż 2 gb
- 9. Czy MediaPlayer powinien działać w osobnym wątku?
- 10. fstream seekg(), seekp() i write()
- 11. W jaki sposób można użyć std :: bind?
- 12. W jaki sposób std :: set wolniej niż std :: map?
- 13. AVCaptureSession z wieloma wyjściami?
- 14. W jaki sposób zaimplementowano std :: has_virtual_destructor?
- 15. W jaki sposób wdraża się std :: tuple?
- 16. Jaki typ powinien std :: remove_cv produkować na tablicy const T?
- 17. Czy konstruktor C++ powinien naprawdę działać?
- 18. Czy manifest HTML cache powinien działać również z żądaniami ajax?
- 19. W jaki sposób implicite z wieloma wejściami mogą być używane w Scali?
- 20. W jaki sposób C++ std :: mutex łączy się z zasobem?
- 21. Wieloprocesorowe przetwarzanie w Pythonie z kilkoma wejściami
- 22. W jaki sposób Objective-C singleton powinien implementować metodę init?
- 23. Jaki jest najlepszy sposób postępowania z wejściami adresowymi, które mogą pochodzić z wielu krajów?
- 24. Jak zwrócić fstream (C++ 0x)
- 25. W jaki sposób aplikacja .NET może działać z 32-bitowym i 64-bitowym pakietem Office?
- 26. fstream nie utworzy pliku
- 27. Testy jednostkowe z długimi wejściami
- 28. Czy Miliard Śmieszy Atak powinien działać w C#?
- 29. powinien std :: vector alignof honor (value_type)?
- 30. Czy std :: atomic powinien być lotny?