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

  FORUM HardWare.fr
  Programmation
  C++

  [C] Probleme de noms de fichier longs....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Probleme de noms de fichier longs....

n°233147
Tim2460
Le Gentil Papa
Posté le 23-10-2002 à 17:20:38  profilanswer
 

Bonjour a tous...
 
Je rencontre un probleme avec les noms de fichiers longs ....
 
J'ai programmé un petit programme qui fait des modifications dans un fichier texte (remove.exe).
Comme j'ai DOSKEY installé sous XP, je tape :
remove "un nom de fichier long.txt"
et ca marche. le nom du fichier est bien pris en argument argV et le programme marche. Doskey place lui meme les doubles quotes "_____"
Mon user voulais faire un  
remove *.txt ....
Hmmmm
J'ai fait un remove2 ou avec un system(), je fais un DIR /b
pour mettre la liste des fichiers texte dans un fichier liste.txt
 
J'arrive bien a lire ce fichier et a afficher les lignes....
 
Mais contrairement a mon autre programme ou le passage par argument marchait impec, mon nouveau programme ne veux pas ouvrir les fichiers (fichier entrée et un fichier sortie avec ZZ_ rajouté devant. Il s'arete au premier espace du nom de fichier.
ex : Acorn missing.txt
Le programme me sort : imposible d'ouvrir Acorn
 
J'ai donc rajouté "a la main" des quotes devant et derriere le nom du fichier pour avoir a nouveau "Acorn missing.txt" comme dans le passage par argument mais ca ne marche toujours pas...
Imposible d'ouvrir "Acorn missing.txt" ....
 
La je seche ,)
Quelqu'un bosse avec des noms de fichiers longs?
Des que suis chez moi je poste les extraits du code..

mood
Publicité
Posté le 23-10-2002 à 17:20:38  profilanswer
 

n°233277
Carbon_14
Posté le 23-10-2002 à 20:38:41  profilanswer
 

Y aurait pas moyen d'utiliser une commmande "généralisée" genre
 
for %f in (*.txt) do remove %f.  
Dans %f on doit retrouver le nom du fichier comme truc.txt
 
Pour les noms longs, si c'est en DOS 32 bits, ça va peut-être (je suis pas certain du tout :(, j'ai modifié un de mes anciens prog DOS en 32 bits mais sais plus :()..

n°233575
Tim2460
Le Gentil Papa
Posté le 24-10-2002 à 09:44:45  profilanswer
 

carbon_14 a écrit a écrit :

Y aurait pas moyen d'utiliser une commmande "généralisée" genre
 
for %f in (*.txt) do remove %f.  
Dans %f on doit retrouver le nom du fichier comme truc.txt
 
Pour les noms longs, si c'est en DOS 32 bits, ça va peut-être (je suis pas certain du tout :(, j'ai modifié un de mes anciens prog DOS en 32 bits mais sais plus :()..




 
Faire un .bat tu veux dire? J'ai essayé et le programme s'arrete aux noms avec un espace a l'interieur.... No chance :/
 
Voila le debut du code de ma deuxieme version du programme...
Si quelqu'un a une idée... Je peux lui envoyer les sources et des fichiers exemples ,)
 
Merci de votre temps !
 

Code :
  1. /* Fichier.c Remove [a] Ver 1.2 14/10/2002 */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. enum {SUCCESS, FAIL, MAX_LEN = 200} ;
  6. int LineReadWrite(FILE *fin, FILE *fout) ;
  7. main ()
  8. {
  9.         FILE * fptr1, *fptr2, *fptr3 ;
  10.         int reval = SUCCESS ;
  11.         char fichiercurrent[MAX_LEN] ;
  12.         int fichierread = 0 ;
  13.         int nblignes ;
  14.         system ("DIR *miss*.txt /b >liste.txt" ) ;
  15.         if ((fptr3 = fopen("liste.txt", "r" )) == NULL)
  16.         {
  17.          printf("Ouverture imposible du fichier liste.txt\n" ) ;
  18.         reval = FAIL ;
  19.         }
  20.         while  (!feof(fptr3))
  21.         {
  22.          char filename1[200] = "\"ZZ_";
  23.         char filename2[200] = "\"" ;
  24.                 char quote = '\"' ;
  25.                 fgets(fichiercurrent, MAX_LEN, fptr3) ;
  26.         fichierread++ ;
  27.         strcpy(filename2, fichiercurrent) ;
  28.                 filename2[(strlen(filename2))-1] = quote ;
  29.            /*     strcat(filename2, quote) ;   */
  30.          strcat(filename1, fichiercurrent) ;
  31.             filename1[(strlen(filename1))-1] = quote ;
  32.            /*     strcat(filename1, quote) ;   */
  33.                 printf("-%s-\n",filename1) ;
  34.         if ((fptr1 = fopen(filename1, "w" )) == NULL)
  35.          {
  36.          printf("Ecriture imposible dans %s\n", filename1) ;
  37.          reval = FAIL ;
  38.          }
  39.         else
  40.          {
  41.          if ((fptr2 = fopen(filename2, "r" )) == NULL)
  42.          {
  43.           printf("Ouverture imposible de %s\n", filename2) ;
  44.           reval = FAIL ;
  45.           }
  46.          else
  47.          {
  48.           nblignes = LineReadWrite(fptr2, fptr1) ;
  49.            fclose(fptr1) ;
  50.           fclose(fptr2) ;
  51.          } ;
  52.          }
  53.         }
  54. return reval ;
  55. }

n°233595
Tim2460
Le Gentil Papa
Posté le 24-10-2002 à 10:06:10  profilanswer
 

alors que le passage par argument qui marche bien :
 

Code :
  1. /* Fichier.c Remove [a] Ver 1.2 14/10/2002 */
  2. #include <stdio.h>
  3. #include <string.h>
  4. enum {SUCCESS, FAIL, MAX_LEN = 200} ;
  5. void LineReadWrite(FILE *fin, FILE *fout) ;
  6. main (int argc, char *argv[])
  7. {
  8. FILE * fptr1, *fptr2 ;
  9. char filename1[200] = "ZZ_Done_ZZ_";
  10. char filename2[200] ;
  11. int reval = SUCCESS ;
  12. strcpy(filename2, argv[1]) ;
  13. strcat(filename1, argv[1]) ;
  14. if ((fptr1 = fopen(filename1, "w" )) == NULL)
  15. {
  16.  printf("Ecriture imposible dans %s.\n", filename1) ;
  17.  reval = FAIL ;
  18. }
  19. else
  20. {
  21.  if ((fptr2 = fopen(filename2, "r" )) == NULL)
  22.  {
  23.   printf("Ouverture imposible de %s.\n", filename2) ;
  24.   reval = FAIL ;
  25.  }
  26.  else
  27.  {
  28.   LineReadWrite(fptr2, fptr1) ;
  29.   fclose(fptr1) ;
  30.   fclose(fptr2) ;
  31.  } ;
  32. }
  33. return reval ;
  34. }

n°233634
Carbon_14
Posté le 24-10-2002 à 11:20:32  profilanswer
 

Je viens d'essayer avec DIR au lieu de remove, mais en mettant "%f", ça marche ! (suis sous DOS de NT4).
 
Donc faudrait essayer  
for %f in (*.txt) do remove "%f"
 
Si le soft remove accepte les noms longs à espaces, c'est gagné.

n°233909
Tim2460
Le Gentil Papa
Posté le 24-10-2002 à 15:35:43  profilanswer
 

Merci Carbon j'ai reeusi a reparer mon programme deuxieme version ,)
 
Parcontre ta methode marche aussi ;)
 
Ca m'en ferra deux qui marche comme ca  :jap:


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

  [C] Probleme de noms de fichier longs....

 

Sujets relatifs
rajouter une extention a un fichierTransformation d'hexa en caractère dans une lecture de fichier
[urgent] [php] comment voir que le fichier a ete creé ?[Postgresql] lancemen,t d'un fichier automatiquement
Problème avec une requête SQLImportation de fichier TXT sous Access
[PHP] Problème de configuration de PHP sur ma machine[Urgent] Probleme de communication
[XHTML 1.1] Problème de validationProblème avec les sessions
Plus de sujets relatifs à : [C] Probleme de noms de fichier longs....


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