krzycho89 Temat założony przez niniejszego użytkownika |
operacje na plikach » 2011-12-28 20:14:04 WItam. Czytam sobie stary kurs c++ wersje 2.0 a konkretnie obsluge plików http://cpp0x.pl/kursy/Kurs-C++-v2-0/Obsluga-plikow/138i nie pasuje mi kond związany z funkcją fail() std::fstream plik( "plik.txt", std::ios::in ); plik.seekg( + 2, std::ios_base::end ); if( plik.fail() ) std::cout << "Error! Nie udalo sie przesunac wewnetrznego wskaznika pliku" << std::endl;
EDIT: Kompilując to zawsze fail() zwraca wartość 0 a przecież powinno zwrócić 1 i wyświetlić napis. A może to nie o to w tym chodzi i źle myśle? Proszę o pomoc i wyjaśnienie tego bo nie ogarniam ;p Z góry dzięki. |
|
SeaMonster131 |
» 2011-12-28 21:49:21 Funkcja zwróci true, (!= 0) jeżeli nie udało się przesunąć wskaźnika. Więc musisz zobaczyć jak ten plik wygląda, bo jeżeli wskaźnik się przesunie, to się napis nie pojawi :) |
|
krzycho89 Temat założony przez niniejszego użytkownika |
» 2011-12-28 22:48:25 Nadal nie ogarniam. Pierwszy dział który sprawia tyle trudności. być może za długo już dzisiaj przy C++ siedze i skupić sie nie mogę. W pliku txt nie wyskakiwało fail=1, faktycznie przeskoczył kursor o dużą ilość kiedy wpisałem w miejsce dwójki 800, a miejsca między starym tekstem a nowym ustawieniem kursora wypełnił spacjami. Pojawił się nowy problem. Program dopisuje (zamienia) tekst który wpisuje pod koniec pliku, ale jeśli dodam polecenie które ma dopisać tekst do pliku parę instrukcji wcześniej to wyskakuje mi fail()=1 i nie zostanie dopisany ani jeden tekst (opisane poniżej komentarzami w kodzie) dlaczego tak się dzieje? I dlaczego jak przestawiam wskaźnik wewnętrzny odczytu to zmienia sie tez wskaźnik zapisu? Chciałbym w końcu tą obsługę plików ogarnąć bo już mnie ten dział zaczyna męczyć ;(. #include <iostream> #include <string> #include <fstream>
int main() { std::string dane; std::fstream plik; plik.open( "heh.txt", std::ios::in | std::ios::out ); std::cout << plik.is_open() << std::endl << "Pozycja\n"; std::cout << "Gdzie wskazniki wewn, odczyt/zapis?\n"; std::cout << plik.tellg() << std::endl; std::cout << plik.tellp() << std::endl; std::cout << "odczytuje dane z pliku dane:\n"; plik >> dane; std::cout << dane << std::endl; plik << "jakis tekst"; std::cout << "Gdzie wskazniki wewn, odczyt/zapis?\n"; std::cout << plik.tellg() << std::endl; std::cout << plik.tellp() << std::endl; std::cout << "fail?" << plik.fail() << std::endl; plik.seekg( 0, std::ios_base::beg ); plik << "0123456789"; std::cout << "Gdzie wskazniki wewn, odczyt/zapis?\n"; std::cout << plik.tellg() << std::endl; std::cout << plik.tellp() << std::endl; plik.close(); return 0; } |
|
pekfos |
» 2011-12-29 10:05:12 plik.seekg( 0, std::ios_base::beg ); plik << "0123456789"; Tak chciałeś na koniec się dostać? nie ta metoda, nie ta flaga.. |
|
krzycho89 Temat założony przez niniejszego użytkownika |
» 2011-12-29 15:57:54 Ok pomyłka, miało być: plik.seekg( 0, std::ios_base::end ); Ale bardziej chodziło mi o to, że nie mogę dopisać tego 1 tekstu "jakiś tekst" bo wyskakuje fail()=1 i nie dopisuje się ani pierwszy ani drugi ciąg znaków... |
|
pekfos |
» 2011-12-29 17:44:46 Ok pomyłka, miało być:
plik.seekg( 0, std::ios_base::end ); |
Wciąż pomyłka.. |
|
krzycho89 Temat założony przez niniejszego użytkownika |
» 2011-12-29 18:12:40 Hmm, no nic kombinuje dalej ;p Na błędach się człowiek uczy najlepiej ;d |
|
krzycho89 Temat założony przez niniejszego użytkownika |
» 2011-12-30 00:18:42 Nie mogę... Poddaje się. Gdzieś czytałem, że nie można łączyć std::ios:in z std::ios:out nie wyjaśniono dlaczego. Gdzieś indziej czytałem o ifstream oraz ofstream i nimi należy majstrować przy plikach, a w lekcji o obsłudze plików jest festream, gdzie wczytano obydwa parametry ios::in oraz out. Ktoś może wyjaśnić jak "jeździć" po pliku? i dalczego moim kodzie raz wczytuje dane do pliku a raz nie? dlaczego po kompilacji czasami pokazuje mi wskaźniki w miejscu "-1". Moge pominąć ten dział i zająć się czymś innym ale wolłym tego nie robić i opanować to zanim przejdę dalej... |
|
« 1 » 2 |