Ouvrire fichier via fichier txt. [Résolu]

Messages postés
3
Date d'inscription
jeudi 31 mars 2011
Dernière intervention
1 avril 2011
- - Dernière réponse : elboso23
Messages postés
3
Date d'inscription
jeudi 31 mars 2011
Dernière intervention
1 avril 2011
- 1 avril 2011 à 10:26
Bonjour,

mon probleme est le suivant.

j'ai fait une application QT pour gerer les interfaces avec l'utilisateur.
suite a ca je fais appel a un programme edité en C pour faire toute la conversion d'un language GCode (commande numerique) en Val3 ( language robotique ).

avec l'interface, j'edite un fichier .app qui me donne le chemin de fichier que je dois traduire
lorsque l'application en C se lance, il lis bien le fichier, il inscris bien le bon chemin a faire. mais la est le bemol il n'arrive pas a trouver le fichier....

je teste en ecrivant directement dans le code le chemin du fichier ( tel qu'il est ecrit sur mon fichier .app) et la ca passe....

  int Copy(char const * const source, char const * const destination)
{
    FILE* fSrc;
    FILE* fDest;
    struct prog;
    struct Copy;
    char buffer[512];
    char NomProgOld[512];
    int NbLus;

    strcpy(copy.FolderTemp,"");
    strcpy(copy.FolderTemp,"Temp\");
    strcpy(copy.TEMP,".temp");
    printf("prog.ChoixProgramme :%s",prog.ChoixProgramme);
    //system("pause");

// Ici se pose mon probleme.
// ouvrire le fichier de cette maniere est correcte

    if ((fSrc fopen("C:/Users/lgillet/Desktop/ALFAGT_bis.ngc", "rb")) NULL) 
    {
              system("cls");
              printf("copy: Impossible d'ouvrire: %s \n", prog.ChoixProgramme);
              system("pause");
        return 1;
    }
    
    strcpy(copy.FolderTemp,"Temp\");
    strcpy(copy.TEMP,".temp");
    
    
       //strcpy(prog.NomProg,NomProgOld);                       
       strcat(prog.NomProg, copy.TEMP);// nom programme + extension
       strcat(copy.FolderTemp,prog.NomProg);// Folder + nom programme + extension  
       strcpy(prog.NomProg,"Temp\\Temp.temp");
       printf("%s \n", prog.NomProg);
    system("pause");

    if ((fDest fopen("Temp\\Temp.temp", "wb")) NULL)
    {
               system("cls");
              printf("Impossible de copier le fichier: %s\n", copy.FolderTemp);
              system("pause");
        fclose(fSrc);
        return 2;
    }
    
    while ((NbLus = fread(buffer, 1, 512, fSrc)) != 0)
        fwrite(buffer, 1, NbLus, fDest);
    
    fclose(fDest);
    fclose(fSrc);
   // system("pause");
    
    return 0;
}  


 int Copy(char const * const source, char const * const destination)
{
    FILE* fSrc;
    FILE* fDest;
    struct prog;
    struct Copy;
    char buffer[512];
    char NomProgOld[512];
    int NbLus;

    strcpy(copy.FolderTemp,"");
    strcpy(copy.FolderTemp,"Temp\");
    strcpy(copy.TEMP,".temp");
    printf("prog.ChoixProgramme :%s",prog.ChoixProgramme);
    //system("pause");
// Ecris comme ceci, impossible de voir le fichier
//prog.ChoixProgramme="C:/Users/lgillet/Desktop/ALFAGT_bis.ngc" 


    if ((fSrc fopen(prog.ChoixProgramme, "rb")) NULL) 
    {
              system("cls");
              printf("copy: Impossible d'ouvrire: %s \n", prog.ChoixProgramme);
              system("pause");
        return 1;
    }
    
    strcpy(copy.FolderTemp,"Temp\");
    strcpy(copy.TEMP,".temp");
    
    
       //strcpy(prog.NomProg,NomProgOld);                       
       strcat(prog.NomProg, copy.TEMP);// nom programme + extension
       strcat(copy.FolderTemp,prog.NomProg);// Folder + nom programme + extension  
       strcpy(prog.NomProg,"Temp\\Temp.temp");
       printf("%s \n", prog.NomProg);
    system("pause");

    if ((fDest fopen("Temp\\Temp.temp", "wb")) NULL)
    {
               system("cls");
              printf("Impossible de copier le fichier: %s\n", copy.FolderTemp);
              system("pause");
        fclose(fSrc);
        return 2;
    }
    
    while ((NbLus = fread(buffer, 1, 512, fSrc)) != 0)
        fwrite(buffer, 1, NbLus, fDest);
    
    fclose(fDest);
    fclose(fSrc);
   // system("pause");
    
    return 0;
}
 


qqu'un aurais une idée?
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
3
Date d'inscription
jeudi 31 mars 2011
Dernière intervention
1 avril 2011
3
Merci
Je repond tout seul a mon post car j'ai trouver ou etais le probleme ( je le met au cas ou qqu'un d'autre tomberais sur le meme soucis )

lorsque vous allez recherche le nom d'un dossier via fichier text.
lors de la copie de celui-ci vers le string un espace se crée entre la fin de ma chaine et le \0;

et c'est a cause de cette espace que le fichier est introuvable. car nous ne lisons plus un chemin relatif, mais un chemin absolu! a prendre garde car on tourne en rond inutilement si on ne le sais pas.


Rien n'est impossible.

Merci elboso23 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de elboso23
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Dernière intervention
14 février 2014
0
Merci
salut,

Il n'y aurait pas un problème / et \ ?

if ((fSrc fopen("C:/Users/lgillet/Desktop/ALFAGT_bis.ngc", "rb")) NULL)

si l'un fonctionne, l'autre aussi ou j'aimerais voir la structure prog.

@++
Commenter la réponse de cs_patatalo
Messages postés
3
Date d'inscription
jeudi 31 mars 2011
Dernière intervention
1 avril 2011
0
Merci
J'ai essayer avec le slash et l'anti-slash
j'ai teste les deux, de la maniere preformater les deux fonctionne ( du moin je n'ai pas eu d'erreur ni de retour de fichier NULL )

\\ ( chemin relatif), / ( chemin absolu ).


 #ifndef STARTMENU_H_INCLUDED
#define STARTMENU_H_INCLUDED
#define TAILLE_MAX_STARTMENU 500
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <time.h>
//#include <windows.h>

struct Prog
{
    
     char NomProg[TAILLE_MAX_STARTMENU];
     int StartMenu;
     char ChoixProgramme[TAILLE_MAX_STARTMENU];

} prog;



#endif // STARTMENU_H_INCLUDED 


Rien n'est impossible.
Commenter la réponse de elboso23

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.