• 1
  • 2
2003-09-21, 19:12
  #1
Medlem
blueCommands avatar
I FILE är det ju bara att kolla outputet från read(...), men hur gör man detta med ifstream? Dettar har med min förra post att göra...

Jag vill dela in filen i 1024 bytes bitar.. har denna kod:

....
fstream fin(fname,ios::binary);

int nTotal=0, nBytesRead=0;

while(HÄR SAKNAS KOD, TYP: IFSTREAM LÄST < 1024 bytes) {
fin.read(szBuffer,1024);
send(fd2,szBuffer,nBytesRead,0);
nTotal+=nBytesRead;
cout << "\n" <<nTotal; //Debug
}
fin.close();
....
Citera
2003-09-21, 19:31
  #2
Medlem
Citat:
Ursprungligen postat av blueCommand
fstream fin(fname,ios::binary);

int nTotal=0, nBytesRead=0;

while(HÄR SAKNAS KOD, TYP: IFSTREAM LÄST < 1024 bytes) {
fin.read(szBuffer,1024);
send(fd2,szBuffer,nBytesRead,0);
nTotal+=nBytesRead;
cout << "\n" <<nTotal; //Debug
}
fin.close();
....


do
{
nBytesread=fin.read(szBuffer, 1024);
..
}while(!(nBytesRead<1024));

Dvs. så länge inläst data ej är mindre än 1024. Då den är mindre än 1024 innebär slutet.
Citera
2003-09-21, 19:32
  #3
Medlem
blueCommands avatar
main.cpp: In function `void PutFile(const char*, unsigned int)':
main.cpp:18: invalid conversion from `void*' to `int'

rad 18: nBytesRead=fin.read(szBuffer, 1024);
Citera
2003-09-21, 19:35
  #4
Medlem
Citat:
Ursprungligen postat av blueCommand
main.cpp: In function `void PutFile(const char*, unsigned int)':
main.cpp:18: invalid conversion from `void*' to `int'

rad 18: nBytesRead=fin.read(szBuffer, 1024);

Jaha oj. Trodde den returnerade läst antal bytes. Hmm.
Ja just det, va dum jag är.
Använd dig av .eof()
while(!fin.eof())
Citera
2003-09-21, 19:40
  #5
Medlem
blueCommands avatar
Den slutar ju aldrig!

void PutFile(const char *fname,SOCKET fd2){
fstream fin(fname,ios::binary);

int fd, nTotal=0, nBytesRead=0, retval, aborted=0;

while(!fin.eof()){
fin.read(szBuffer, 1024);
send(fd2,szBuffer,nBytesRead,0);
nBytesRead = 1024; //Temporärt.. Crika värde
nTotal+=nBytesRead;
cout << "\n" <<nTotal << " EOF: " << fin.eof();
}
fin.close();

cout << "DONE";
return;
}
Citera
2003-09-21, 19:52
  #6
Medlem
ifstream fin(fname, ...);

while(fin)
fin.read(...,...);

fin.close();


?
Citera
2003-09-21, 19:59
  #7
Medlem
blueCommands avatar
tänk vad ett litet i kan göra... heheh ... Nu funkar det
Citera
2003-09-21, 20:01
  #8
Medlem
Hehe, finally
Citera
2003-09-21, 20:05
  #9
Medlem
blueCommands avatar
Nu skall jag bara se till att den skickar ett bra slut också... :P, Så clienten slutar skriva... Kommer det funka med alla filer om jag typ skickar EOF_FILE_TRANSFER_DONE och kollar på clienten om detta finns med? Vad händer isåfall om jag har en textfil som innehåller just den meningen?
Citera
2003-09-21, 20:09
  #10
Medlem
Citat:
Ursprungligen postat av blueCommand
Nu skall jag bara se till att den skickar ett bra slut också... :P, Så clienten slutar skriva... Kommer det funka med alla filer om jag typ skickar EOF_FILE_TRANSFER_DONE och kollar på clienten om detta finns med? Vad händer isåfall om jag har en textfil som innehåller just den meningen?

Skicka först ett paket som berättar att en fil är på väg och storleken på filen.
Sätt upp en mottagarfunktion som tar emot så många bytes av filen som var sagd.
Citera
2003-09-21, 20:10
  #11
Medlem
blueCommands avatar
Nu när du ändå är online, hur kollar man snabbast det? Bytesen alltså..
Citera
2003-09-21, 20:18
  #12
Medlem
Citat:
Ursprungligen postat av blueCommand
Nu när du ändå är online, hur kollar man snabbast det? Bytesen alltså..


lonf fSize = fin.seekg(0, std::ios::end).tellg();

edit: ställ tillbaka pekaren med fin.seekg(0) innan du börjar läsa
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in