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

getline

Ostatnio zmodyfikowano 2011-03-11 19:21
Autor Wiadomość
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
C/C++
#include <string>
#include <fstream>
using namespace std;

int main() {
    ifstream in( "Scopy.cpp" ); // Open for reading
    ofstream out( "Scopy2.cpp" ); // Open for writing
    string s;
    while( getline( in, s ) ) // Discards newline char
         out << s << "\n"; // ... must add it back
   
} ///:~
niestety plików typu *.mp3 lub *.png nie da się w ten sposób, mógł by mi ktoś pomóc ?
P-29064
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) seekg
wielkosc 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
C/C++
plik.open( "cos.mp3", ios::binary );


P-29065
pekfos
» 2011-03-11 11:55:42
ja zaproponował bym najprostsze możliwe rozwiązanie. funkcję .rdbuf().
C/C++
ifstream ifs( "heheh.txt" );
ofstream ofs( "ihihih.txt" );
ofs << ifs.rdbuf();
cały plik w jednej linii przepływa bez użycia pętli.
P-29068
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
C/C++
#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ć ?
P-29069
pekfos
» 2011-03-11 12:54:00
C/C++
#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();
}
P-29070
dmx81
» 2011-03-11 14:11:26
C/C++
#include <fstream>
using namespace std;

int main() {
    ifstream plik( "1.mp3", ios::binary ); //plik do odczytu
    ofstream plik2( "2.mp3", ios::binary ); //plik do zapisu
    plik.seekg( 0, ios::end ); // ustawia wskaznik na koniec pliku
    int size = plik.tellg(); // zwraca liczbe calkowita w bajtach, liczac od poczatku pliku do pozycji wskaznika
    plik.seekg( 0, ios::beg ); // ustawia spowrotem wskaznik na poczatek pliku
    char tab[ size ]; // tworzy tablice o rozmiarze size bajtow
    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++)
P-29071
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
P-29073
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?
P-29076
« 1 » 2
  Strona 1 z 2 Następna strona