[C++] Obsługa plików, seekg, seekp
Ostatnio zmodyfikowano 2012-01-11 21:26
imralav Temat założony przez niniejszego użytkownika |
[C++] Obsługa plików, seekg, seekp » 2011-07-16 10:26:20 Cześć! Wszystkie poziomy kursu mam już przerobione, zająłem się materiałami dodatkowymi. Jestem na etapie obsługi plików. Doszedłem do akapitu "Poruszanie się po pliku z danymi", w którym pisze coś takiego: [li]seekg() ustawia wewnętrzny wskaźnik pliku dla funkcji odczytujących dane;[/li] [li]seekp() ustawia wewnętrzny wskaźnik pliku dla funkcji zapisujących dane.[/li]
|
Co sugeruje, że są dwa wewnętrzne wskaźniki pliku, dla zapisu i odczytu. Jednakże według napisanego właśnie przeze mnie programu: #include <iostream> #include <fstream>
using namespace std;
void czyszczenie_tablicy( char tab[], int i ) { for( int j; j < i; j++ ) { tab[ j ] = 0; } }
int main() { fstream plik; plik.open( "c:/plik.txt", ios::in | ios::out ); if( plik.good() == true ) { cout << plik.tellg() << endl; cout << plik.tellp() << endl; plik.seekg( 1, ios_base::beg ); plik.seekp( 2, ios_base::beg ); cout << plik.tellg() << endl; cout << plik.tellp() << endl; plik.close(); } else cout << "Pliku nie udalo sie otworzyc\n"; return 0; return 0; }
jest tylko jeden wskaźnik pliku dla odczytu i zapisu. Ostateczna wartosc 'tellg()' i 'tellp()' wynosi 2, choć tę cyfrę przypisałem tylko pod 'seekp'. Czy jest ktoś w stanie wyjaśnić mi, jak to w końcu działa? Pozdrawiam, imralav. |
|
malan |
» 2011-07-16 10:33:05 Pliku nie otwiera się do odczytu i do zapisu jednocześnie. Amen. Nic więcej dodawać nie trzeba :) |
|
imralav Temat założony przez niniejszego użytkownika |
» 2011-07-16 10:34:10 Czegoś takiego się nie spodziewałem. Dlaczego nie? |
|
El-Pablo |
» 2012-01-11 21:26:46 s::app (append - dopisywanie danych do pliku) Ustawia wewnętrzny wskaźnik zapisu pliku na jego koniec. Plik otwarty w trybie tylko do zapisu. Dane mogą być zapisywane tylko i wyłącznie na końcu pliku.
ios::ate (at end) Ustawia wewnętrzny wskaźnik pliku na jego koniec w chwili otwarcia pliku.
ios::binary (binary) Informacja dla kompilatora, aby dane były traktowane jako strumień danych binarnych, a nie jako strumień danych tekstowych.
ios::in (input - wejście/odczyt) Zezwolenie na odczytywanie danych z pliku.
ios::out (output - wyjście/zapis) Zezwolenie na zapisywanie danych do pliku.
ios::trunc (truncate) Zawartość pliku jest tracona, plik jest obcinany do 0 bajtów podczas otwierania.
Wszystkie wymienione tryby możemy łączyć ze sobą - oznacza to, że jeśli chcemy otrzymać plik do odczytu i zapisu wystarczy oddzielić je pojedynczym operatorem |.
C/C++
std::fstream plik;
plik.open( "nazwa_pliku.txt", std::ios::in | std::ios::out );
Co innego jest napisane w kursie malan :) |
|
« 1 » |