yoogi Temat założony przez niniejszego użytkownika |
getline » 2011-03-10 23:37:58 Witam mam problem z tą funkcją, chcę wczytać plik z całości do bufora a potem zapisać z powrotem jak czytałem thinking in c++ to był w 2 roździale kod na kopiowanie plików tekstowych #include <string> #include <fstream> using namespace std;
int main() { ifstream in( "Scopy.cpp" ); ofstream out( "Scopy2.cpp" ); string s; while( getline( in, s ) ) out << s << "\n"; }
niestety plików typu *.mp3 lub *.png nie da się w ten sposób, mógł by mi ktoś pomóc ? |
|
dmx81 |
» 2011-03-10 23:52:40 ja bym proponowal tak: seekg i tellg - uzyjesz do ustalenia wielkosci pliku; (seekg ustaw na koniec plik, tellg odczytasz wartosc bajtow, wrocisz seekg na poczatek) seekgwielkosc ta zapiszesz w int wielkosc; utworzysz tablice char tab[ wielkosc ]; przeczytasz plik.read( tab, wielkosc ); teraz masz wplik wczytany, zapisac podobnie mozesz przez plik2.write( tab, wielkosc ); gdzie plik to ifstream, plik2 to ofstream, a seekg i tellg uzyjesz jakos tak: plik.seekg (0, ios::end); wielkosc = plik.tellg(); plik.seekg (0, ios::beg);
poskladaj do kupy i do dziela :) mam nadzieje, ze zadziala ps - otwieraj pliki binarnie plik.open( "cos.mp3", ios::binary );
|
|
pekfos |
» 2011-03-11 11:55:42 ja zaproponował bym najprostsze możliwe rozwiązanie. funkcję .rdbuf(). ifstream ifs( "heheh.txt" ); ofstream ofs( "ihihih.txt" ); ofs << ifs.rdbuf(); cały plik w jednej linii przepływa bez użycia pętli. |
|
yoogi Temat założony przez niniejszego użytkownika |
» 2011-03-11 12:38:02 dzięki ;] sposób dmx'a trochę długi i nie chciało mi isę go robić (nie że nie szanuję twojej pracy) bo przesunąłem w dół i był sposób pekfos'a ale nie działał poprawnie kopiował tylko część pliku :( więc udało mi się zrobić coś takiego #include <string> #include <fstream> using namespace std;
int main() { ifstream plik; ofstream plik2; plik.open( "a.mp3", ios::binary ); plik2.open( "b.mp3", ios::binary ); plik2 << plik.rdbuf(); }
więc to takie połączenie waszych sposobów ;] tylko pozostaję jeszcze pytanie jak to do zmiennej wczytać ? |
|
pekfos |
» 2011-03-11 12:54:00 #include <iostream> #include <fstream> #include <sstream> #include <string> using namespace std;
int main() { ifstream ifs( "file.txt", ios::binary ); ostringstream oss; oss << ifs.rdbuf(); string str = oss.str(); }
|
|
dmx81 |
» 2011-03-11 14:11:26 #include <fstream> using namespace std;
int main() { ifstream plik( "1.mp3", ios::binary ); ofstream plik2( "2.mp3", ios::binary ); plik.seekg( 0, ios::end ); int size = plik.tellg(); plik.seekg( 0, ios::beg ); char tab[ size ]; plik.read( tab, size ); wczytuje do tablicy ustalana ilosc bajtow plik2.write( tab, size ); zapisuje do pliku z tablicy ustalana ilosc bajtow }
wcale nie takie dlugie ;) poza tym mozna latwo nauczyc sie operowac wskaznikiem w pliku - warto znac wiele sposobow;) jak bedziesz mial czas, to sprawdz tez ten i powiedz czy dziala, bo nie sprawdzalem (mam nadzieje, ze bledu gdzies nie popelnilem) a co do drugiego sposobu - to wychodzi tu doswiadczenie ;) szczerze, to sam sie wlasnie o nim dowiedzialem, wiec z pozytkiem dla mnie:) wiadomo, ciezko przyswoic wszytskie funkcje, triki itd - przychodzi z czasem ( a tez jestem w trakcie lektury thinking in c++) |
|
yoogi Temat założony przez niniejszego użytkownika |
» 2011-03-11 17:26:35 dzięki ;] a co do lektury to jest bardzo fajna tylko czasami człowiek żałuję 69 zł na książkę skoro można było pobrać pdf'a |
|
dmx81 |
» 2011-03-11 18:00:06 ja tam nie zaluje, moge zabrac ze soba i w przerwie obiadowej/kawowej doczytywac kolejne rozdzialy:) wczesniej to wlasnie sciagalem rozne pdfy i drukowalem, niezle sie makulatury uzbieralo, ale to nie to samo , takze nie ma co zalowac :) temat juz do zamkniecia? problem rozwiazany? |
|
« 1 » 2 |