begin process at 2012 05 29 11:48:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

fopen()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fopen()

jeudi 4 septembre 2003 à 20:23:51 | fopen()

JCpp

Je voudrai réaliser la même méthode que « Anacr0x »,
qui consiste à lire et écrire dans un fichier.

Je reprends la même chose que « Anacr0x », qui permet de lire un fichier :
http://www.cppfrance.com/forum.aspx?Article=16355

char buf2[1024+1];
FILE *FichierEnvoi = fopen("c:\\MsgBox.ico", "rb");

char TailleChar[100];

DWORD Taille=TailleFichier("c:\\MsgBox.ico");
sprintf(TailleChar,"%d",Taille);

while(!feof(FichierEnvoi))
{
fread(buf2,1024,1,FichierEnvoi);
}
fclose(FichierEnvoi);

La deuxième partie pour l'enregistrement me pose des pb,
qui consiste à enregistrer le contenu de buf2.

« Anacr0x », utilise :
int FichierRecu = open(chaine, _O_CREAT | _O_WRONLY | _O_BINARY, 0755);
et "write » et « close » que mon compilateur n'accepte pas

Donc, j'ai modifié,
mon pb c'est que ça n'enregistre pas tout, et c'est même pas le début, ni la fin du fichier.


FILE *FichierRecu= FichierRecu = fopen("c:\\MsgBox2.ico", "wb");
char buf[1024+1];

while(Taille > 0)
{
fwrite (buf2 , 1 ,strlen(buf2) , FichierRecu);
Taille = Taille - 1;
}
fclose(FichierRecu);

Je ne suis vraiment pas doué avec « fopen », et surtout avec « fread », « fwrite ».

Merci d'avance de consacré un peux de temps pour mon pb
jeudi 4 septembre 2003 à 20:39:50 | Re : fopen()

aardman

Membre Club
Salut,
Et ton buffer tu le remplis jamais avant d'essayer de l'ecrire dans un fichier ?
Et dans fwrite, il faut ecrire le nombre d'octet que tu recois (valeur retournée par recv(...) et non strlen(Buf).



-------------------------------
Réponse au message :
-------------------------------

> Je voudrai réaliser la même méthode que « Anacr0x »,
> qui consiste à lire et écrire dans un fichier.
>
> Je reprends la même chose que « Anacr0x », qui permet de lire un fichier :
> http://www.cppfrance.com/forum.aspx?Article=16355
>
> char buf2[1024+1];
> FILE *FichierEnvoi = fopen("c:\\MsgBox.ico", "rb");
>
> char TailleChar[100];
>
> DWORD Taille=TailleFichier("c:\\MsgBox.ico");
> sprintf(TailleChar,"%d",Taille);
>
> while(!feof(FichierEnvoi))
> {
> fread(buf2,1024,1,FichierEnvoi);
> }
> fclose(FichierEnvoi);
>
> La deuxième partie pour l'enregistrement me pose des pb,
> qui consiste à enregistrer le contenu de buf2.
>
> « Anacr0x », utilise :
> int FichierRecu = open(chaine, _O_CREAT | _O_WRONLY | _O_BINARY, 0755);
> et "write » et « close » que mon compilateur n'accepte pas
>
> Donc, j'ai modifié,
> mon pb c'est que ça n'enregistre pas tout, et c'est même pas le début, ni la fin du fichier.
>
>
> FILE *FichierRecu= FichierRecu = fopen("c:\\MsgBox2.ico", "wb");
> char buf[1024+1];
>
> while(Taille > 0)
> {
> fwrite (buf2 , 1 ,strlen(buf2) , FichierRecu);
> Taille = Taille - 1;
> }
> fclose(FichierRecu);
>
> Je ne suis vraiment pas doué avec « fopen », et surtout avec « fread », « fwrite ».
>
> Merci d'avance de consacré un peux de temps pour mon pb
>
jeudi 4 septembre 2003 à 21:00:26 | HELP!! fopen()

JCpp

j'ai bien le contenu du fichier dans buf2.
j'ai toujours le mm pb, je n'arive pas à enregister le contenu de buf2


FILE *FichierRecu= FichierRecu = fopen("c:\\MsgBox2.ico", "wb");

while(Taille > 0)
{
fwrite (buf2 , Taille , 1, FichierRecu);
Taille = Taille - 1;
}
fclose(FichierRecu);
jeudi 4 septembre 2003 à 21:03:37 | Re : fopen()

Anacr0x

Pour ton serveur (ou client) qui envoi le fichier, utilise ca :

DWORD TailleFichier(char *fichier)
{
DWORD TFichier = 0;
HANDLE hfl = CreateFile(fichier, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN, NULL);
// Donne la taille en octet
TFichier = (GetFileSize(hfl, 0));
CloseHandle(hfl);
return TFichier;
}

char *CheminFichier = "C:\\fichier.exe"; // a modifié

// On crée le buffer et on ouvre le fichier en binaire
char buf2[1024+1];
FILE *FichierEnvoi = fopen(CheminFichier, "rb");

// On envoi la taille du fichier
char TailleChar[100];
DWORD Taille=TailleFichier(CheminFichier);
sprintf(TailleChar,"%d",Taille);

sockwrite(Client, TailleChar);

// On envoi le fichier tant qu'on est pas a la fin
while(!feof(FichierEnvoi))
{
memset(buf2, 0, sizeof(buf2));
fread(buf2,1024,1,FichierEnvoi);
send(Client,buf2,1024,0);
}
// On le ferme
fclose(FichierEnvoi);


et pour le récepteur, ca :

// Crée le fichier en mode binaire
FILE *FichierRecu = fopen("C:\\lefichierketuveu.exe", "ab");

char buf[1024+1];
memset(buf, 0, sizeof(buf));
// On réceptionne la taille du fichier
recv(Client, buf, sizeof(buf), 0);

// On la transforme en int
int taille = atoi(buf);

unsigned int n;
// Tant qu'on est pas arrivé a la taille du fichier on receptionne les données
while(taille > 0)
{
memset(buf, 0, sizeof(buf));
n = recv(Client, buf, sizeof(buf), 0);
// On écrit dans le fichier
fwrite(buf, n, 1, FichierRecu);
taille = taille - n;
}
// On ferme le fichier
fclose(FichierRecu);


Voila, je pense que je n'ai rien oublié, en cas de pb, n'hésite pas a demandé
J'espere que ca t'as aidé, @+
jeudi 4 septembre 2003 à 21:09:56 | Re : HELP!! fopen()

aardman

Membre Club
Salut,
Poste tout ton code ici.
La je vois aucun recv(...) qui rempli le buffer.
Le recv(...) doit etre dans la meme boucle que le fwrite(...).
Tu recois 1024 octets, tu ecris 1024 octets, tu recois 1024 octets, tu ecris 1024 octets, etc...



-------------------------------
Réponse au message :
-------------------------------

> j'ai bien le contenu du fichier dans buf2.
> j'ai toujours le mm pb, je n'arive pas à enregister le contenu de buf2
>
>
> FILE *FichierRecu= FichierRecu = fopen("c:\\MsgBox2.ico", "wb");
>
> while(Taille > 0)
> {
> fwrite (buf2 , Taille , 1, FichierRecu);
> Taille = Taille - 1;
> }
> fclose(FichierRecu);
jeudi 4 septembre 2003 à 21:14:07 | Re : fopen()

Anacr0x

oups, petit oublie, remplace sockwrite(Client, TailleChar); par send(Client,TailleChar,strlen(TailleChar),0);
voila, ca devré allé un peu mieu

-------------------------------
Réponse au message :
-------------------------------

> Pour ton serveur (ou client) qui envoi le fichier, utilise ca :
>

> DWORD TailleFichier(char *fichier)
> {
> DWORD TFichier = 0;
> HANDLE hfl = CreateFile(fichier, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
> FILE_FLAG_SEQUENTIAL_SCAN, NULL);
> // Donne la taille en octet
> TFichier = (GetFileSize(hfl, 0));
> CloseHandle(hfl);
> return TFichier;
> }
>
> char *CheminFichier = "C:\\fichier.exe"; // a modifié
>
> // On crée le buffer et on ouvre le fichier en binaire
> char buf2[1024+1];
> FILE *FichierEnvoi = fopen(CheminFichier, "rb");
>
> // On envoi la taille du fichier
> char TailleChar[100];
> DWORD Taille=TailleFichier(CheminFichier);
> sprintf(TailleChar,"%d",Taille);
>
> sockwrite(Client, TailleChar);
>
> // On envoi le fichier tant qu'on est pas a la fin
> while(!feof(FichierEnvoi))
> {
> memset(buf2, 0, sizeof(buf2));
> fread(buf2,1024,1,FichierEnvoi);
> send(Client,buf2,1024,0);
> }
> // On le ferme
> fclose(FichierEnvoi);
>

>
> et pour le récepteur, ca :
>

> // Crée le fichier en mode binaire
> FILE *FichierRecu = fopen("C:\\lefichierketuveu.exe", "ab");
>
> char buf[1024+1];
> memset(buf, 0, sizeof(buf));
> // On réceptionne la taille du fichier
> recv(Client, buf, sizeof(buf), 0);
>
> // On la transforme en int
> int taille = atoi(buf);
>
> unsigned int n;
> // Tant qu'on est pas arrivé a la taille du fichier on receptionne les données
> while(taille > 0)
> {
> memset(buf, 0, sizeof(buf));
> n = recv(Client, buf, sizeof(buf), 0);
> // On écrit dans le fichier
> fwrite(buf, n, 1, FichierRecu);
> taille = taille - n;
> }
> // On ferme le fichier
> fclose(FichierRecu);
>

>
> Voila, je pense que je n'ai rien oublié, en cas de pb, n'hésite pas a demandé
> J'espere que ca t'as aidé, @+
jeudi 4 septembre 2003 à 21:16:57 | Re : fopen()

aardman

Membre Club
Salut,
Honnetement je pense que copier un bout de code sans chercher a resoudre son probleme est pas très utile.
Sinon je vais quand meme faire une remarque constructive (:p):
Pourquoi utilise tu CreateFile() et CloseHandle() dans TailleFichier() et ensuite fopen(), fread() et compagnie ?
Tu devrais tout faire avec CreateFile(), ReadFile() et CloseHandle().

Un dernier truc, le sprintf(TailleChar,"%d",Taille); que tu peux remplacer par ultoa(...), bcp mieux.

-------------------------------
Réponse au message :
-------------------------------

> Pour ton serveur (ou client) qui envoi le fichier, utilise ca :
>

> DWORD TailleFichier(char *fichier)
> {
> DWORD TFichier = 0;
> HANDLE hfl = CreateFile(fichier, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
> FILE_FLAG_SEQUENTIAL_SCAN, NULL);
> // Donne la taille en octet
> TFichier = (GetFileSize(hfl, 0));
> CloseHandle(hfl);
> return TFichier;
> }
>
> char *CheminFichier = "C:\\fichier.exe"; // a modifié
>
> // On crée le buffer et on ouvre le fichier en binaire
> char buf2[1024+1];
> FILE *FichierEnvoi = fopen(CheminFichier, "rb");
>
> // On envoi la taille du fichier
> char TailleChar[100];
> DWORD Taille=TailleFichier(CheminFichier);
> sprintf(TailleChar,"%d",Taille);
>
> sockwrite(Client, TailleChar);
>
> // On envoi le fichier tant qu'on est pas a la fin
> while(!feof(FichierEnvoi))
> {
> memset(buf2, 0, sizeof(buf2));
> fread(buf2,1024,1,FichierEnvoi);
> send(Client,buf2,1024,0);
> }
> // On le ferme
> fclose(FichierEnvoi);
>

>
> et pour le récepteur, ca :
>

> // Crée le fichier en mode binaire
> FILE *FichierRecu = fopen("C:\\lefichierketuveu.exe", "ab");
>
> char buf[1024+1];
> memset(buf, 0, sizeof(buf));
> // On réceptionne la taille du fichier
> recv(Client, buf, sizeof(buf), 0);
>
> // On la transforme en int
> int taille = atoi(buf);
>
> unsigned int n;
> // Tant qu'on est pas arrivé a la taille du fichier on receptionne les données
> while(taille > 0)
> {
> memset(buf, 0, sizeof(buf));
> n = recv(Client, buf, sizeof(buf), 0);
> // On écrit dans le fichier
> fwrite(buf, n, 1, FichierRecu);
> taille = taille - n;
> }
> // On ferme le fichier
> fclose(FichierRecu);
>

>
> Voila, je pense que je n'ai rien oublié, en cas de pb, n'hésite pas a demandé
> J'espere que ca t'as aidé, @+
jeudi 4 septembre 2003 à 21:24:15 | Re : HELP!! fopen()

JCpp

je teste le code "Anacr0x".
g po encore réuci!
Un fichié ce crée, mai il y a po tout
jeudi 4 septembre 2003 à 21:27:03 | Re : fopen()

BruNews

Administrateur CodeS-SourceS
C'est quoi ce bordel de code, excusez le mot mais on accede aux fichiers un coup en win32, un coup avec des flux, et sera quoi la prochaine. Si on code pour win32 on s'y tient, c'est WriteFile pour ecrire sinon on fait tout en fluflux.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Salut,
> Honnetement je pense que copier un bout de code sans chercher a resoudre son probleme est pas très utile.
> Sinon je vais quand meme faire une remarque constructive (:p):
> Pourquoi utilise tu CreateFile() et CloseHandle() dans TailleFichier() et ensuite fopen(), fread() et compagnie ?
> Tu devrais tout faire avec CreateFile(), ReadFile() et CloseHandle().
>
> Un dernier truc, le sprintf(TailleChar,"%d",Taille); que tu peux remplacer par ultoa(...), bcp mieux.
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Pour ton serveur (ou client) qui envoi le fichier, utilise ca :
> >

> > DWORD TailleFichier(char *fichier)
> > {
> > DWORD TFichier = 0;
> > HANDLE hfl = CreateFile(fichier, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
> > FILE_FLAG_SEQUENTIAL_SCAN, NULL);
> > // Donne la taille en octet
> > TFichier = (GetFileSize(hfl, 0));
> > CloseHandle(hfl);
> > return TFichier;
> > }
> >
> > char *CheminFichier = "C:\\fichier.exe"; // a modifié
> >
> > // On crée le buffer et on ouvre le fichier en binaire
> > char buf2[1024+1];
> > FILE *FichierEnvoi = fopen(CheminFichier, "rb");
> >
> > // On envoi la taille du fichier
> > char TailleChar[100];
> > DWORD Taille=TailleFichier(CheminFichier);
> > sprintf(TailleChar,"%d",Taille);
> >
> > sockwrite(Client, TailleChar);
> >
> > // On envoi le fichier tant qu'on est pas a la fin
> > while(!feof(FichierEnvoi))
> > {
> > memset(buf2, 0, sizeof(buf2));
> > fread(buf2,1024,1,FichierEnvoi);
> > send(Client,buf2,1024,0);
> > }
> > // On le ferme
> > fclose(FichierEnvoi);
> >

> >
> > et pour le récepteur, ca :
> >

> > // Crée le fichier en mode binaire
> > FILE *FichierRecu = fopen("C:\\lefichierketuveu.exe", "ab");
> >
> > char buf[1024+1];
> > memset(buf, 0, sizeof(buf));
> > // On réceptionne la taille du fichier
> > recv(Client, buf, sizeof(buf), 0);
> >
> > // On la transforme en int
> > int taille = atoi(buf);
> >
> > unsigned int n;
> > // Tant qu'on est pas arrivé a la taille du fichier on receptionne les données
> > while(taille > 0)
> > {
> > memset(buf, 0, sizeof(buf));
> > n = recv(Client, buf, sizeof(buf), 0);
> > // On écrit dans le fichier
> > fwrite(buf, n, 1, FichierRecu);
> > taille = taille - n;
> > }
> > // On ferme le fichier
> > fclose(FichierRecu);
> >

> >
> > Voila, je pense que je n'ai rien oublié, en cas de pb, n'hésite pas a demandé
> > J'espere que ca t'as aidé, @+
>
jeudi 4 septembre 2003 à 21:35:41 | Re : fopen()

Anacr0x

Pour aardman :
Tu as sans doute raison, mais il manquait pas mal de précision dans sa question que j'ai préféré lui donné la réponse entière et construite... Après, je pense que le code n'est pas trè dure a comprendre et de plus je l'ai commenté... En cas d'un quelconque pb de compréhension, qu'il n'hésite pas a me demandé a moi ou a quelqu'un d'autre, je lui répondrait... (Et puis j'avais tt le code sous la main, ca a été rapide pour moi (^_^) )

Sinon, pour CreateFile et fopen, j'utilise principalement fopen tellement jsui habitué a cette technique mais la j'ai du me servir de CreateFile pour utilisé la commande GetFileSize, je n'ai pas trouver d'autre moyen avec fopen donc...

Pour ultoa, je regarde ca et je change, merci

pour BruNews :
Idem que pour aardman, j'aurait préféré garder mes bon vieux fopen que j'ai l'habitude de manipuler mais a vrai dire j'ai pas trouver d'autre technique qu'avec CreateFile...
C'est sans doute pas parfait mais ca a au moin le mérite de marcher (^_^)

-------------------------------
Réponse au message :
-------------------------------

> C'est quoi ce bordel de code, excusez le mot mais on accede aux fichiers un coup en win32, un coup avec des flux, et sera quoi la prochaine. Si on code pour win32 on s'y tient, c'est WriteFile pour ecrire sinon on fait tout en fluflux.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Salut,
> > Honnetement je pense que copier un bout de code sans chercher a resoudre son probleme est pas très utile.
> > Sinon je vais quand meme faire une remarque constructive (:p):
> > Pourquoi utilise tu CreateFile() et CloseHandle() dans TailleFichier() et ensuite fopen(), fread() et compagnie ?
> > Tu devrais tout faire avec CreateFile(), ReadFile() et CloseHandle().
> >
> > Un dernier truc, le sprintf(TailleChar,"%d",Taille); que tu peux remplacer par ultoa(...), bcp mieux.
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Pour ton serveur (ou client) qui envoi le fichier, utilise ca :
> > >

> > > DWORD TailleFichier(char *fichier)
> > > {
> > > DWORD TFichier = 0;
> > > HANDLE hfl = CreateFile(fichier, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
> > > FILE_FLAG_SEQUENTIAL_SCAN, NULL);
> > > // Donne la taille en octet
> > > TFichier = (GetFileSize(hfl, 0));
> > > CloseHandle(hfl);
> > > return TFichier;
> > > }
> > >
> > > char *CheminFichier = "C:\\fichier.exe"; // a modifié
> > >
> > > // On crée le buffer et on ouvre le fichier en binaire
> > > char buf2[1024+1];
> > > FILE *FichierEnvoi = fopen(CheminFichier, "rb");
> > >
> > > // On envoi la taille du fichier
> > > char TailleChar[100];
> > > DWORD Taille=TailleFichier(CheminFichier);
> > > sprintf(TailleChar,"%d",Taille);
> > >
> > > sockwrite(Client, TailleChar);
> > >
> > > // On envoi le fichier tant qu'on est pas a la fin
> > > while(!feof(FichierEnvoi))
> > > {
> > > memset(buf2, 0, sizeof(buf2));
> > > fread(buf2,1024,1,FichierEnvoi);
> > > send(Client,buf2,1024,0);
> > > }
> > > // On le ferme
> > > fclose(FichierEnvoi);
> > >

> > >
> > > et pour le récepteur, ca :
> > >

> > > // Crée le fichier en mode binaire
> > > FILE *FichierRecu = fopen("C:\\lefichierketuveu.exe", "ab");
> > >
> > > char buf[1024+1];
> > > memset(buf, 0, sizeof(buf));
> > > // On réceptionne la taille du fichier
> > > recv(Client, buf, sizeof(buf), 0);
> > >
> > > // On la transforme en int
> > > int taille = atoi(buf);
> > >
> > > unsigned int n;
> > > // Tant qu'on est pas arrivé a la taille du fichier on receptionne les données
> > > while(taille > 0)
> > > {
> > > memset(buf, 0, sizeof(buf));
> > > n = recv(Client, buf, sizeof(buf), 0);
> > > // On écrit dans le fichier
> > > fwrite(buf, n, 1, FichierRecu);
> > > taille = taille - n;
> > > }
> > > // On ferme le fichier
> > > fclose(FichierRecu);
> > >

> > >
> > > Voila, je pense que je n'ai rien oublié, en cas de pb, n'hésite pas a demandé
> > > J'espere que ca t'as aidé, @+
> >
>

1 2

Cette discussion est classée dans : taille, fopen, buf2, fichierrecu, fichierenvoi


Répondre à ce message

Sujets en rapport avec ce message

envoi de fichier par socket [ par Anacr0x ] bon vouala, j'ai crée un serveur et un client, tt se passe bien, il parle entre eux et tt et tt. Par contre, quan je veu envoyer un fichier, ca merd ! MFC - donner une taille fixe à ma fenetre principale [ par Worldofdada ] Alors, j'ai fait quelques recherches et j'ai trouvé quelques trucs mais pas tout.J'ai crées une appli en MFC single application.Je voudrais que sa tai taille d'un fichier [ par poseidon2 ] A pres avoir fait:FILE *fp=fopen(....);Comment recuperer la taille du fichier que l'on viens d'ouvrir?Merci d'avance.Poseidon2 Nom d'utilisateur [ par gibozsec ] Je cherche a récupérer le nom de l'utilisateur qui a lancé le programme. J utilise le code suivant avec MS Visual Studio 6.0 et XP home :LPTSTR tampon Reception de fichiers par socket [ par guiguikun ] Quelqu'un peut-il me dire pourquoi est-ce qu'avec le code ci-dessous je suis obligé d'envoyer des packets d'1 octet pour que le fichier soit complet ? fopen() [ par JCpp ] J'ai un pb pas bien méchant.long lSize;char * buffer;FILE * pFile = fopen ("c:\\toto.txt", "r" );while ( fgetc(pFile) !=EOF){ lSize = ftell (pFile); r fopen d un fichier partagé [ par jamopoy ] quelqu'un sait til comment ouvrir un fichier partagé??? fopen("C://folder/file.txt","r+"); comment ecrire le chemin d acces d un fichier partagé??? av Taille d'un fichier sur Internet [ par Xaviou ] Salut.Je cherche à obtenir la taille d'un fichier sur internet en passant par les API WinINet.J'arrive à ouvrir une URL avec InternetOpenUrl(...)et à Taille du texte [ par garslouche ] Bonjour,je récupère le handle d'un bouton et j'en modifie le texte. Mais je voudrais que le bouton prenne une taille adaptée au texte (sachant que la Taille d'un fichier ? [ par JCpp ] Je cherche une fonction pour connaître la taille d'un fichier et même voir d'un répertoire en Ko.Merci


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,248 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales