Récupération du nom de fichier - C - Programmation
Marsh Posté le 07-05-2006 à 19:13:22
#
fread(buffer,65535,1,fichier); // Lecture du fichier
et si size > 65535 ?
la solution à ton problème : transférer le nom du fichier, c'est tout.
Marsh Posté le 07-05-2006 à 20:41:24
Donc l'utilisation des fonctions recv() et send() suffit?
Marsh Posté le 07-05-2006 à 21:53:35
si ton OS le permet, tu peux aussi utiliser sendfile pour transférer des fichiers.
Marsh Posté le 08-05-2006 à 11:59:51
lynxia a écrit :
|
Comme l'a dit Taz, si jamais ton fichier fait plus de 65535 octets, tu ne le récupèreras pas en entier. En plus, il me semble que "fread" travaille en signé donc il s'arrête à 32767 (c'est à vérifier). Bon, de toute façon, quelle que soit la limite t'es coincée si ton fichier la dépasse
Il faut que ton client fasse une boucle de lecture et d'envoi sur la socket
Code :
|
Et que ton serveur fasse une boucle de réception de la socket et d'écriture
Code :
|
Le "N" étant une constante pouvant être définie à la valeur que tu veux (de 1 à 65535)
Quand au nom du fichier, il sera évidemment transmis en tout premier sur le serveur...
Marsh Posté le 08-05-2006 à 12:19:06
Citation : En plus, il me semble que "fread" travaille en signé donc il s'arrête à 32767 (c'est à vérifier) |
size_t est non signé. et même sur une machine 16bits, tu peux lire avec fread 2**32 octets.
Marsh Posté le 08-05-2006 à 17:46:04
Merci à vous
Mais.. hmm je ne comprends pas bien la constante N, ça change rien que je mette 1 ou 65535?
Marsh Posté le 08-05-2006 à 17:54:11
lynxia a écrit : Merci à vous |
doit être < à la taille de buffer ...
Marsh Posté le 08-05-2006 à 20:48:40
lynxia a écrit : Mais.. hmm je ne comprends pas bien la constante N, ça change rien que je mette 1 ou 65535? |
C'est juste une constante qui donne le nb d'octets que tu liras à chaque boucle
Tu la définis comme tu veux (ex: #define N 1000) mais elle influera sur la mémoire et le temps d'exécution de la boucle.
Si elle est définie à 1, tu lis le fichier octet par octet et tu écris sur la socket octet par octet. C'est long mais ça ne consomme pas de mémoire.
Si elle est définie à 65535, ta boucle utilise 65535 fois plus de mémoire mais fait 65535 fois moins d'itérations.
Ensuite, c'est une question de compromis qui dépend souvent de la machine qui exécute ton pgm...
Marsh Posté le 08-05-2006 à 20:53:11
lynxia a écrit : Ok merci je comprends mieux |
Bien entendu, il te faut aussi définir ton buffer ainsi
Code :
|
Marsh Posté le 08-05-2006 à 23:31:50
Reply
Marsh Posté le 07-05-2006 à 19:03:51
Bonjour,
J'ai un client qui se connecte à mon serveur pour lui transférer un fichier texte.
Voici un extrait du code client lors du transfert du fichier:
J'aimerais que mon serveur récupère exactement le même nom de fichier que le client lui aura transféré.
Je pensais créer une variable "nomfichier" dans mon code serveur dans laquelle je stockerais "chemin" issu du client, mais je ne vois pas comment faire.
Ca fonctionne bien si je précise manuellement le chemin dans mon code serveur, mais j'aimerais pouvoir faire
avec nomfichier = chemin