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

  FORUM HardWare.fr
  Programmation
  C

  [C] problème de fichiers

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] problème de fichiers

n°2120133
jlnh
Posté le 08-01-2012 à 16:00:28  profilanswer
 

Bonjour,
 
J'ai un problème pour transférer des datas.
Au dessus d'un certain nombre ça foire!
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define  UI32 unsigned __int32
  5. #define  FN_MAX_SIZE 64            // max file path/name
  6. void
  7. main(int argc, char *argv[])
  8.   {
  9.   UI32      i;
  10.   char      inpname[FN_MAX_SIZE], outname[FN_MAX_SIZE];
  11.   FILE      *finp, *fout;
  12.   if (argc != 3)
  13.     {
  14.     printf("%s\n", "Usage: " );
  15.     exit (1);
  16.     }
  17.   /* Store arguments */
  18.   strncpy(inpname, argv[1], FN_MAX_SIZE);
  19.   strncpy(outname, argv[2], FN_MAX_SIZE);
  20.   /* Open input file */
  21.   finp = fopen(inpname,"r" );
  22.   if (finp == NULL) exit(2);
  23.   /* Open output file */
  24.   fout = fopen(outname,"w" );
  25.   if (fout == NULL) exit(3);
  26.   i = 2934129;
  27.   while(i)
  28.     {
  29.     fputc(getc(finp),fout);
  30.     i--;
  31.     }
  32.   fclose(finp);
  33.   fclose(fout);
  34.   }


 
Enregistre 2939145 bytes avec Watcom.
Le bon nombre avec gcc mais toutes les datas au dessus de 8548 sont à 0xff.
 
Donc il y a un problème, mais lequel?
 
Merci pour votre temps.
 
Bye,
Jean-Louis


Message édité par jlnh le 08-01-2012 à 16:33:15
mood
Publicité
Posté le 08-01-2012 à 16:00:28  profilanswer
 

n°2120152
Sve@r
Posté le 08-01-2012 à 17:46:55  profilanswer
 

Salut
 
3 questions
1) tu es sur quel OS
2) que contiennent les fichiers (du texte ou du binaire comme image, son, vidéo, etc)
3) c'est quoi ce "i = 2934129" ???

n°2120153
jlnh
Posté le 08-01-2012 à 17:55:48  profilanswer
 

1) console windows 7
2) binaire
3) Une valeur qu'il devait me transférer dans le programme d'origine
      j'ai réécris un programme juste avec le problème.
 
Exécution du programme principal:
 

Code :
  1. E:\Sources\new>m4p file.m4p file.m4a
  2. feof: 0
  3. Execute ftyp!
  4. feof: 0
  5. Execute moov
  6. Start sub_moov for 108 bytes
  7. moov -> mvhd for 100 bytes
  8. Fill for 100 bytes
  9. Filled with 100 bytes
  10. Start sub_moov for 2934129 bytes
  11. moov -> trak for 2934121 bytes
  12. Fill for 2934121 bytes
  13. Filled with 2934121 bytes
  14. Too much i = 209174 j = 538976288
  15. Start sub_moov for 538976288 bytes
  16. Tag 20202020 unknow sub_moov
  17. Fill for 538976280 bytes
  18. ^C
  19. E:\Sources\new>

Message cité 1 fois
Message édité par jlnh le 08-01-2012 à 18:00:34
n°2120158
jlnh
Posté le 08-01-2012 à 18:31:55  profilanswer
 

OK, sorry ce n'est pas un problème C.
 
Il fonctionne sous Linux:
 

Code :
  1. [root@ns new]# ./a.out file.m4p file.m4a
  2. feof: 0
  3. Execute ftyp!
  4. feof: 0
  5. Execute moov
  6. Start sub_moov for 108 bytes
  7. moov -> mvhd for 100 bytes
  8. Fill for 100 bytes
  9. Start sub_moov for 2934129 bytes
  10. moov -> trak for 2934121 bytes
  11. Fill for 2934121 bytes
  12. Start sub_moov for 14715 bytes
  13. moov -> trak for 14707 bytes
  14. Fill for 14707 bytes
  15. Start sub_moov for 194459 bytes
  16. Tag 75647461 unknow sub_moov
  17. Fill for 194451 bytes
  18. Return from sub_moov
  19. feof: 0
  20. Execute mdat


 
Comment faire tourner ce programme sous Windows?


Message édité par jlnh le 08-01-2012 à 18:49:28
n°2120165
Sve@r
Posté le 08-01-2012 à 19:09:56  profilanswer
 

jlnh a écrit :

1) console windows 7
2) binaire
3) Une valeur qu'il devait me transférer dans le programme d'origine
 
...OK, sorry ce n'est pas un problème C.
 
Il fonctionne sous Linux:
Comment faire tourner ce programme sous Windows?


 
Tu remarques que ma question 1 avait son importance. :bounce:  
Lorsqu'on ouvre un fichier binaire sous Windows, il faut rajouter "b" au mode d'ouverture => fopen(..., "rb" ) ou fopen(..., "wb" ). C'est dû à la façon spéciale qu'à windows de considérer les fichiers textes et donc lui demander de ne pas considérer le fichier comme du texte.
Ce problème n'existe pas sous Linux qui considère tous les fichiers comme fichiers binaires (merci encore une fois à Windows de tout compliquer à plaisir).
 
Toutefois je suis surpris de ta réponse 3. Tu dis que i est une "valeur à transférer" mais tu t'en sers comme compteur de caractères lus... enfin si ça marche c'est l'essentiel.

n°2120167
jlnh
Posté le 08-01-2012 à 19:23:19  profilanswer
 

Tout est réglé.
Merci beaucoup.
i est la taille du container
j est la taille de l'atom
s'il reste des datas non traitées à la fin
je transfère sans m'inquièter.
 

Code :
  1. E:\Sources\new>m4p file.m4p file.m4a
  2. feof: 0
  3. Execute ftyp for 28 bytes
  4. feof: 0
  5. Execute moov for 3143411 bytes
  6. Start sub_moov for 108 bytes
  7. moov -> mvhd for 100 bytes
  8. Fill for 100 bytes
  9. Start sub_moov for 2934129 bytes
  10. moov -> trak for 2934121 bytes
  11. Fill for 2934121 bytes
  12. Start sub_moov for 14715 bytes
  13. moov -> trak for 14707 bytes
  14. Fill for 14707 bytes
  15. Start sub_moov for 194459 bytes
  16. moov -> udta for 194451 bytes
  17. Fill for 194451 bytes
  18. feof: 0
  19. Execute mdat for 248254944 bytes
  20. E:\Sources\new>


 
Ouf!


Message édité par jlnh le 08-01-2012 à 20:12:45

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

  [C] problème de fichiers

 

Sujets relatifs
probleme image en sortit de codeProblème boucle while
[C] soulignéEnvoi de fichiers dans la zone privée d'un site, confidentialité ?
mastermind en Caide rémuniré dans un projer de C++ pr une etudiante en 1 ere année
[C#/C] Dllimport et pointeur de fonctionProblème avec Type défini par l'utilisateur...
[C]Gérer le env -i ?[Résolu] Problème pour lire et écrire des fichiers pgm en C++
Plus de sujets relatifs à : [C] problème de fichiers


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