Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2090 connectés 

  FORUM HardWare.fr
  Programmation

  Problème de copie de fichier en c !!!!

 



 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Problème de copie de fichier en c !!!!

n°77728
bruno_lac
Posté le 03-12-2001 à 17:24:29  profilanswer
 

Voila le problème
 
j'ouvre un fichier en lecture et un autre en écriture.
je lis le fichier en lecture avec fread et le copie dans l'autre avec fwrite.Le fichier en lecture est de 20k mais le fichier en ecriture n'as que 7 octet pas rapport.
Après je ferme les fichiers avec fclose.
 
Quel peut etre le problème????

mood
Publicité
Posté le 03-12-2001 à 17:24:29  profilanswer
 

n°77742
la viper
Posté le 03-12-2001 à 18:32:36  profilanswer
 

montre ton code svp

n°77904
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-12-2001 à 10:07:44  profilanswer
 

peut-être que tu ouvres tes fichiers en mode texte...
j'ai deja fait ce genre de bêtises. ça te remplace tous les octets valant 10 ou 13 par 2 octets valant 10 et 13 (\n).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°77986
bouteilled​o
Posté le 04-12-2001 à 11:52:04  profilanswer
 

Utilise plutot la fct fgets pour lire caractere par caractere.
J' usqu' à la fin du fichier.( WHILE !FEOF(Fint))
100 pour cent efficace.

n°77988
chrisbk
-
Posté le 04-12-2001 à 11:53:25  profilanswer
 

bouteilledo a écrit a écrit :

Utilise plutot la fct fgets pour lire caractere par caractere.
J' usqu' à la fin du fichier.( WHILE !FEOF(Fint))
100 pour cent efficace.  




 
?
 
copie un fichier de 100Mo avec cette methode, t pas couche :D

n°78000
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-12-2001 à 12:35:20  profilanswer
 

si c'est un fichier binaire et non pas texte ça va sûrement foirer avec fgets :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°78001
Pitounet
Posté le 04-12-2001 à 12:42:36  profilanswer
 

exact !
essaye d'utiliser fread octet par octet.
et surtout, ouvre ton fichier en mode binaire !

 

[edtdd]--Message édité par Pitounet--[/edtdd]

n°78003
chrisbk
-
Posté le 04-12-2001 à 12:52:42  profilanswer
 

Pitounet a écrit a écrit :

exact !
essaye d'utiliser fread octet par octet.
et surtout, ouvre ton fichier en mode binaire !  
 
 




 
octet par octet ?
 
Heuh non, mieux vaut lire des blocs d'un coup....

n°78009
Pitounet
Posté le 04-12-2001 à 13:13:01  profilanswer
 

mais si tu fais ça, il faut vérifier à chaque fois le nombre d'octets effectivement lus. Sinon, tu peux te retrouver avec un fichier de sortie plus gros que le fichier d'entrée.

n°78011
chrisbk
-
Posté le 04-12-2001 à 13:15:15  profilanswer
 

bah c pas la mere a boire hein ?
 
un truc du genre
 
 
//ouverture de fichier in et out
 
char buffer[5000];
 
int val;
 
while(1)
{
 val = fread(buffer,5000,1,in);
 val = fwrite(buffer,val,1,out);
 if (val !=5000)
   break;
}

mood
Publicité
Posté le 04-12-2001 à 13:15:15  profilanswer
 

n°78013
godbout
Génial.
Posté le 04-12-2001 à 13:17:37  profilanswer
 

bouh le vieux break [:kaola]

n°78016
chrisbk
-
Posté le 04-12-2001 à 13:20:11  profilanswer
 

Godbout a écrit a écrit :

bouh le vieux break [:kaola]  




nanananareuuuhhhh !
 
(j'ai fais au plus vite, rooohhhh)

n°78017
godbout
Génial.
Posté le 04-12-2001 à 13:21:06  profilanswer
 

Pour une fois je vais essayer d'eviter tes conseils :D

n°78019
chrisbk
-
Posté le 04-12-2001 à 13:22:16  profilanswer
 

//ouverture de fichier in et out
 
char buffer[5000];
 
int val;
bool pasBoLeBreak= true;
while(pasBoLeBreak)
{
val = fread(buffer,5000,1,in);
val = fwrite(buffer,val,1,out);
if (val !=5000)
  pasBoLeBreak= false;
}  
 
 
 
heureux ? :D

n°78020
godbout
Génial.
Posté le 04-12-2001 à 13:23:24  profilanswer
 

T'aurais quand meme pu trouver un peu plus beau comme nom de variable :D

n°78022
chrisbk
-
Posté le 04-12-2001 à 13:24:22  profilanswer
 

Godbout a écrit a écrit :

T'aurais quand meme pu trouver un peu plus beau comme nom de variable :D  




 
c'est du code, pas de la poesie :D
(a moins que tu ne codes en Alexandrin ?)

n°78034
godbout
Génial.
Posté le 04-12-2001 à 13:32:09  profilanswer
 

:lol::lol:

n°78036
youdontcar​e
Posté le 04-12-2001 à 13:36:36  profilanswer
 

chrisbk a écrit a écrit :

//ouverture de fichier in et out
 
char buffer[5000];
 
int val;
bool pasBoLeBreak= true;
while(pasBoLeBreak)
{
val = fread(buffer,5000,1,in);
val = fwrite(buffer,val,1,out);
if (val !=5000)
  pasBoLeBreak= false;
}  
 
 
 
heureux ? :D  



:lol:

n°78055
BENB
100% Lux.
Posté le 04-12-2001 à 14:08:35  profilanswer
 

chrisbk a écrit a écrit :

//ouverture de fichier in et out
 
char buffer[5000];
 
int val;
bool pasBoLeBreak= true;
while(pasBoLeBreak)
{
val = fread(buffer,5000,1,in);
val = fwrite(buffer,val,1,out);
if (val !=5000)
  pasBoLeBreak= false;
}  
 
 
 
heureux ? :D  




Si c'est pour l'ecrire comme ca, autant mettre un break :D
 
moi je prefere :
 
 
#define BLOCK_SIZE 5120
char buffer[BLOCK_SIZE ];
 
int val;
do
{
   val = fread(buffer,BLOCK_SIZE ,1,in);  
   val = fwrite(buffer,val,1,out);
}
while (val == BLOCK_SIZE);

n°78059
godbout
Génial.
Posté le 04-12-2001 à 14:10:29  profilanswer
 

BENB a écrit a écrit :

 

Si c'est pour l'ecrire comme ca, autant mettre un break :D





 
Ben vi, c'est ce qu'il avait fait juste au dessus le saligaud :D

n°78060
chrisbk
-
Posté le 04-12-2001 à 14:12:45  profilanswer
 

BENB a écrit a écrit :

 
Si c'est pour l'ecrire comme ca, autant mettre un break :D
 
moi je prefere :
 
 
#define BLOCK_SIZE 5120
char buffer[BLOCK_SIZE ];
 
int val;
do
{
   val = fread(buffer,BLOCK_SIZE ,1,in);  
   val = fwrite(buffer,val,1,out);
}
while (val == BLOCK_SIZE);  




 
Je sais :sweat:  
mais certains sont allergiques au break, aussi petit soit il (c quand meme pas dramatique, enfin, t'en qu'yen a pas 300x / boucles.... )
 
La prochaine fois je fais un goto :na:
 
en tout ca ta version est plus propre, quand meme :D
 
 
(gb : je t'en foutrais moi, des saligauds :D )

n°78061
BENB
100% Lux.
Posté le 04-12-2001 à 14:13:58  profilanswer
 

Godbout a écrit a écrit :

 
 
Ben vi, c'est ce qu'il avait fait juste au dessus le saligaud :D  




J'avais vu :D...
mais j'avoue ne pas avoir ete convaincue par la transformation operee...  
Mais il faut reconnaitre que etant le premier a avoir donne un bout de code, il avait bien le droit de nous donner un brouillon exposant le principe de sa pensee...

n°78062
godbout
Génial.
Posté le 04-12-2001 à 14:14:46  profilanswer
 

Ben c'est sur, c'est pour le charier, surtout que c'est pas moi qui vait lui apprendre des trucs ;) (d'ailleurs j'apprends rien a personne moi :D).

n°78063
chrisbk
-
Posté le 04-12-2001 à 14:15:41  profilanswer
 

pour etre complet, la version godbout :
 
 
while(1)
{
 val = fwrite(buffer,fread(buffer,5000,1,in),1,out);
 if (val != 5000)
    goto fin;
}
fin:

n°78066
godbout
Génial.
Posté le 04-12-2001 à 14:17:11  profilanswer
 

:lol::lol::lol:

n°78067
godbout
Génial.
Posté le 04-12-2001 à 14:18:02  profilanswer
 

while(1)
{
 val = fwrite(fread(buffer,5000,1,in),strlen(fread(buffer,5000,1,in)),1,out);
 if (val != 5000)
    goto fin;
}
fin:
 
:lol::lol:

 

[edtdd]--Message édité par Godbout--[/edtdd]

n°78069
chrisbk
-
Posté le 04-12-2001 à 14:19:33  profilanswer
 

Godbout a écrit a écrit :

while(1)
{
 val = fwrite(fread(buffer,5000,1,in),strlen(fread(buffer,5000,1,in)),1,out);
 if (val != 5000)
    goto fin;
}
fin:
 
:lol::lol:  
 
 




 
:non:
 
marche pas, strlen sur un fichier binaire ca va pas aller
 
par contre
 
 
while(fwrite(buffer,fread(buffer,5000,1,in),1,out)!= 5000);
 
ca c bien :D

n°78070
godbout
Génial.
Posté le 04-12-2001 à 14:20:21  profilanswer
 

ah merde, fichier binaire, trop complique pour moi :D

n°78071
BENB
100% Lux.
Posté le 04-12-2001 à 14:20:43  profilanswer
 

chrisbk a écrit a écrit :

pour etre complet, la version godbout :
 
 
while(1)
{
 val = fwrite(buffer,fread(buffer,5000,1,in),1,out);
 if (val != 5000)
    goto fin;
}
fin:  




Oui, mais alors :
 
for(;fwrite(buffer,fread(buffer,5000,1,in),1,out) != 5000;);
 
c'est la version qui ???

n°78072
BENB
100% Lux.
Posté le 04-12-2001 à 14:21:39  profilanswer
 

Flute, grillee... :lol:

n°78073
chrisbk
-
Posté le 04-12-2001 à 14:23:02  profilanswer
 

en plus c plus joli avec while
 
 
Benb, pour bien comprendre pkoi g appele ca la version godbout, je te propose de jeter un oeil sur le bout de source suivant, copyright godbout:
 
strcpy(ATableau[lignTableau][16].chaine, Format(atof(strcat(Val(ATableau[lignTableau][21].chaine), "000" )), "00000" ));
 
 
(de l'aveu de l'auteur, il a ete raccourci pour pas flinguer la mise en page du forum :D )
 
alors quand tu vois qu'ensuite il vient chipoter pour un break :sarcastic: :D

n°78074
godbout
Génial.
Posté le 04-12-2001 à 14:24:26  profilanswer
 

Faut remettre dans le contexte aussi, c'etait y a 2 mois, fallait que je repompe un code vb en C++, en 1 semaine.
Je captais rien entre les dll, le C++, etc...
 
Bref pour copier, ben j'ai copie :D

n°78078
BENB
100% Lux.
Posté le 04-12-2001 à 14:30:27  profilanswer
 

:lol:    
J'ai vu des codages de cochons...  
Mais la je pense que le recoursissement est dommageable...
 
Si tu as la version Complete Godbout, donne la moi... :D
 
Sisi je vais devoir faire un manuel de regles de codage...
 
...ca me parait un bon exemple de ce qu'il ne faut pas faire :D

n°78080
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-12-2001 à 14:32:59  profilanswer
 

ça vaut pas ceci que j'avais fait y a qques mois:
1 ligne de code, elle fonctionnait, mais par après j'ai quand même optimisé le truc avec des with et variables temporaires. Il s'agit d'une simple assignation :D
 

Code :
  1. (ProjectsList.RTItems.Objects[FindProjectIndex(ProjectsList.RTItems, (TimeSheetRows.Nodes[RowNum-1] as TTimeSheetRow).Project)] as TProject).Tasks.Index := FindTaskIndex((ProjectsList.RTItems.Objects[FindProjectIndex(ProjectsList.RTItems, (TimeSheetRows.Nodes[RowNum-1] as TTimeSheetRow).Project)] as TProject).Tasks.RTItems, (TimeSheetRows.Nodes[RowNum-1] as TTimeSheetRow).Task);


 
(je sais c'est pas du C c'est du Pascal)

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°78081
godbout
Génial.
Posté le 04-12-2001 à 14:33:05  profilanswer
 

[:sisicaivrai]
 
zetes pas gentils [:sisicaivrai]
 
Maintenant ca ressemble plutot a ca, pas tres joli mais bon...
 
resMid = Mid(value, 1, 4);
 
//Maybe an option mobalpa ?
if (strcmp(resMid, "OPT-" ) == 0)
{
 FREE(resMid);
 
 lignSupp++;
 strcpy(ATableau[lignTableau][0].chaine, "O" );
     
 resFormat = Format(lignN, "000" );
 strcpy(ATableau[lignTableau][2].chaine, resFormat);
 FREE(resFormat);

n°78083
chrisbk
-
Posté le 04-12-2001 à 14:33:54  profilanswer
 

benb : la version complete est dans un topic de +100 pages, ca va etre chod a trouver :D

n°78084
godbout
Génial.
Posté le 04-12-2001 à 14:34:05  profilanswer
 

Au fait la dll fonctionnait tres tres bien sur un PIII 1ghz, 512 de ram je vous signale :D

n°78085
BENB
100% Lux.
Posté le 04-12-2001 à 14:36:14  profilanswer
 

Godbout a écrit a écrit :

Au fait la dll fonctionnait tres tres bien sur un PIII 1ghz, 512 de ram je vous signale :D  




Une brouette, quoi ?
1 seul proc je suppose ?

n°78088
godbout
Génial.
Posté le 04-12-2001 à 14:38:34  profilanswer
 

ouais un seul proc, ca ramait un peu mais ca vient du 19", sisi c'est vrai !! :D

n°78089
chrisbk
-
Posté le 04-12-2001 à 14:40:48  profilanswer
 

(arreter de faire les malins avec vos engins, faire de la 3d sur P450 c relou grave)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Problème de copie de fichier en c !!!!

 

Sujets relatifs
[PHP] Tableaux, Sort() et probleme...[DHTML] [JAVA] Petit probleme Netscape - IE
[PHP] Problème de cookie...mettre en majuscule un fichier vi ??
[php]Problème php/mysqlau secours!! mon chargement de fichier en java plante!!
problème sur le PHP et MYSQL HELP ME!!!!!!!Problème en V.B 6
URGENT asp (vb) problème de syntaxe[Oracle] Problème d'installation du service Oracle pour MTS
Plus de sujets relatifs à : Problème de copie de fichier en c !!!!


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR