Ouvrire fichier via fichier txt.

Résolu
elboso23 Messages postés 3 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 1 avril 2011 - 31 mars 2011 à 10:37
elboso23 Messages postés 3 Date d'inscription jeudi 31 mars 2011 Statut Membre 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?

3 réponses

elboso23 Messages postés 3 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 1 avril 2011
1 avril 2011 à 10:26
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.
3
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
1 avril 2011 à 00:59
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.

@++
0
elboso23 Messages postés 3 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 1 avril 2011
1 avril 2011 à 08:37
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.
0
Rejoignez-nous