Avatar billede jpeace Nybegynder
22. maj 2001 - 17:24 Der er 5 kommentarer og
2 løsninger

overførsel af binær fil

Hej!
Jeg har store problemer med at overføre en fil fra min klient til min server. Det er lykkedes mig at overføre en ren tekstfil men jeg ville gerne have en tro kopi af en hvilken som helst fil!
Jeg er ved at lave et client/server system i linux redhat 7.0

Her er det jeg bruger nu:
//modtager fil
void ServerApi::rcTest()
{
    fp1=fopen(\"text2\",\"w\");
    while((read(new_fd,&buf,1)==1) && buf !=23)
      putc(buf,fp1);
    fclose(fp1);
    close(new_fd);
}

//sender fil
void ClientApi::seTest()
{
  fp=fopen(\"tabelkatalog\",\"r\");
  while((STR=getc(fp)) != EOF)
      write(sockfd,&STR,1);
  STR=23;
  write(sockfd,&STR,1);
  cout << STR << \"=buffer\"<<endl;
  fclose(fp);
  close (sockfd);
}

Er der nogen som kan hjælp mig med at lave en overførsel af en binærfil?

jpeace
Avatar billede jbh Nybegynder
22. maj 2001 - 18:29 #1
I andet argument af fopen kan du angive, at du vil åbne file som en binær fil:

fopen(filename, \"rb\");

Jeg har dog erfaring med, at fopen, fread, etc. foretager en eller anden form for konvertering, så jeg brugte _open, _read og _write. Desuden skulle jeg sætte mode\'en for standard output:

_setmode(1, _O_BINARY);

se evt. her:

http://www.eksperten.dk/spm/71374
Avatar billede mickni33 Nybegynder
25. maj 2001 - 09:01 #2
Jeg gør sådan her.(laver selv samme projekt)
ændringer er:
open(\"filnavn\",ios::binary);
close(\"filnavn\",ios::binary);

Avatar billede jpeace Nybegynder
26. maj 2001 - 20:56 #3
tak for svarene.
Jeg/vi har vist selv fundet en løsning... Arbejder med gruppearbejde, så det er egentlig ikke mig som kigger på det der, men vender snart tilbage.

til jbh: fopen(filename, \"rb\");
der er da ikke noget flag som hedder \"rb\" ???
Avatar billede jbh Nybegynder
26. maj 2001 - 21:24 #4
jo, jo - to minutters søgning på nettet:

2.12.3.7 fopen
Declaration:

FILE *fopen(const char *filename, const char *mode);
Opens the filename pointed to by filename. The mode argument may be one of the following constant strings: r read text mode
w write text mode (truncates file to zero length or creates new file)
a  append text mode for writing (opens or creates file and sets file pointer to the end-of-file)
rb read binary mode
wb  write binary mode (truncates file to zero length or creates new file)
ab  append binary mode for writing (opens or creates file and sets file pointer to the end-of-file)
r+ read and write text mode
w+ read and write text mode (truncates file to zero length or creates new file)
a+  read and write text mode (opens or creates file and sets file pointer to the end-of-file)
r+b or rb+ read and write binary mode
w+b or wb+ read and write binary mode (truncates file to zero length or creates new file)
a+b or ab+ read and write binary mode (opens or creates file and sets file pointer to the end-of-file)


If the file does not exist and it is opened with read mode (r), then the open fails.

If the file is opened with append mode (a), then all write operations occur at the end of the file regardless of the current file position.

If the file is opened in the update mode (+), then output cannot be directly followed by input and input cannot be directly followed by output without an intervening fseek, fsetpos, rewind, or fflush.

On success a pointer to the file stream is returned. On failure a null pointer is returned.
Avatar billede jpeace Nybegynder
28. juni 2001 - 00:15 #5
som tidligere nævnt fandt jeg selv en løsning. Men pga. den lange svartid deler jeg hermed pointsne ud.
Avatar billede jpeace Nybegynder
28. juni 2001 - 00:15 #6
som tidligere nævnt fandt jeg selv en løsning. Men pga. den lange svartid deler jeg hermed pointsne ud.
Avatar billede vorherre Nybegynder
18. august 2001 - 16:51 #7
Hvilken løsning kom du frem til???
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester