Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » stream

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.09.2003, 18:18 Uhr
~nAvi
Gast


Servus.
Ich ahb einen C++ stream mit dem ich eine datei öffne.
Wenn ich nun zB eine mp3 öffne kann ich aber die Zeichen nicht einlesen.
Ich hab den stream so geöffnet

C++:
file.open(url,ios_base::binary);
while((buffer=file.get())!=EOF)
{...}



Aber irgendwie liest er kein Zeichen
Woran liegt das?

--edit: Pablo. [ cpp ] tags richtig gesetzt --

Dieser Post wurde am 25.09.2003 um 18:20 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.09.2003, 19:42 Uhr
~(un)wissender
Gast


Kannst du mehr Code liefern?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.09.2003, 19:45 Uhr
~nAvi
Gast



C++:
    
bool open_file(int argc,char *argv[])
    {
    char *url; // pointer for the dynamic memory allocation

    if(argc>=3)
        {
        url = new char[strlen(argv[2])];
        strcpy(url,argv[2]);    
        }
    else
        {
        cerr << "Wrong usage of splitter" << endl;
         return false;
        }

    file.open(url , ios_base::in | ios_base::binary);
    delete[] url;    // free the memory

    if(file.good())
        return true;
    else
        return false;
    }
int main(int argc,char *argv[])
{
...
if(open_file(argc,argv)) // open an ifstream
    {
    cerr << "File opened" << endl;
    while(buffer = file.get())
        {
        count++;
        }
...
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.09.2003, 20:19 Uhr
virtual
Sexiest Bit alive
(Operator)


Du solltest mal nach dem file.open (wie auch immer file jetzt deklariert ist), schaun, on die Datei überhaupt geöffnet wurde. Das kannst du so machen:

C++:
file.open(url , ios_base::in | ios_base::binary);
if (!file)
{
   /* Fehler */
}


Auch das lesen solltest Du vielleicht anders machen:

C++:
while (file.get(buffer))
{
...
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.09.2003, 20:41 Uhr
~(un)wissender
Gast


Ich würde deinen ganzen Kram ersatzlos streichen und nur das schreiben was virtual gepostet hat, das reicht!
Warum z.B. erstellst du url mit new?
Nimm einfach argv[2], da brauchst du nichts weiter kopieren, ist sonst nur Beschäftigungstherapie für deinen Computer...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.09.2003, 20:58 Uhr
~nAvi
Gast


Erstmal danke für eure Tips.
Das mit dem new hab ich nur mal zum Testen geamcht wie das so funktioniert.
Ist zwischen

C++:
while (file.get(buffer))
{
...
}


und

C++:
while (buffer = file.get())
{
...
}


wirklich so ein großer Unterschied?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.09.2003, 21:27 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja. Beim ersten wird nach buffer gelesen und der Streamstatus überprüft
Beim letzten wird nach buffer gelesen und geprüft, ob buffer eine 0 ist oder nicht (wenn 0, dann schleifenabbruch)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.09.2003, 21:36 Uhr
~nAvi
Gast


Stimmt.
Dasn unterschied.
thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.09.2003, 00:22 Uhr
~(un)wissender
Gast


Ah nochwas:
Wenn du new char[strlen(const char *)] verwendest verlierst du die Null(naja den Speicherplatz, die Adresse) beim zählen!
Also immer new char[strlen(const char *) + 1].
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: