Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Obsługa plików, seekg, seekp

Ostatnio zmodyfikowano 2012-01-11 21:26
Autor Wiadomość
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:
C/C++
#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.
P-36048
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 :)
P-36049
imralav
Temat założony przez niniejszego użytkownika
» 2011-07-16 10:34:10
Czegoś takiego się nie spodziewałem. Dlaczego nie?
P-36050
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 :)
P-47982
« 1 »
  Strona 1 z 1