Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » binäre datei blockweise lesen?

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
16.08.2005, 23:56 Uhr
Skippy



so habe ein problem ich möchte gern eine datei blockweise lesen und per winsock versenden

so habe ich es bisher gemacht


C++:
void Socket::SendFiles(const char *filename)
{
FILE *resource = NULL;
char buf[24];
int sizeRead;

//printf ( "file_found Server will send: %s", filename );

resource = fopen(filename, "rb");
if (resource == NULL)
{
  printf ( "not_found: %s", filename );
}
else
{

while(!feof(resource))
      {
          fread(buf, sizeof(buf)-1, 1, resource);
          buf [24] = '\0';
          if(feof(resource))continue;

         send(s_, buf, strlen(buf), 0);
      }
}
fclose(resource);
}



aber das funktioniert nicht ganz wenn fread nicht mehr nen kompletten "buf" hat hab ich lustigerweise nochmal das letzte ausgelsen stück der datei angehangen

es liegt daran das dort schon eof(ist auch genau an der stelle ) bekommt man das irgendwie hin?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.08.2005, 07:07 Uhr
virtual
Sexiest Bit alive
(Operator)


Das Innere der While-schleife kannst Du so schreiben:

C++:
int len = fread(buf, sizeof(buf)-1, 1, resource);
if (len>0) {
    buf[len] = 0;
    send(s_, buf, len+1);
}


--
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
002
17.08.2005, 18:16 Uhr
Pablo
Supertux
(Operator)


Würde fread bei Erfolgsfall nicht 1 zurückliefern, weil nur ein Block der Größe sizeof(len)-1 gelesen wird?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.08.2005, 18:23 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, stimmt. Der 2+3 Parameter müssen vertauscht werden.
--
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
17.08.2005, 19:22 Uhr
Skippy



hab das jetzt so gemacht



C++:
void Socket::SendFiles(const char *filename)
{
FILE *resource = NULL;
char buf[1024];
int sizeRead;

printf ( "file_found Server will send: %s", filename );

resource = fopen(filename, "rb");
if (resource == NULL)
{
  printf ( "not_found: %s", filename );
}
else
{

while(!feof(resource))
     {
          sizeRead=fread( buf,1, sizeof(buf)-1, resource);
  
          buf [sizeRead+1] = '\0';

         send(s_, buf, sizeRead, 0);
      }
}
fclose(resource);
}

Dieser Post wurde am 17.08.2005 um 19:22 Uhr von Skippy editiert.
 
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: