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

  FORUM HardWare.fr
  Programmation
  C

  Ouverture d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ouverture d'un fichier

n°1988972
Chloetone
Posté le 30-04-2010 à 10:02:07  profilanswer
 

Bonjour,
Je voudrais ouvrir un fichier de type XYZ dans mon programme en langage C, mais ca ne marche pas. Je sais qu'il faut le mettre dans le dossier LCC sur le bureau, mais rien n'y fait. Pourtant mon programme est juste puisqu'à la fac tout fonctionne correctement.
Mon fichier s'ouvre avec le bloc-note... Je ne vois pas où est le problème.... Si quelqu'un peut m'aider...

mood
Publicité
Posté le 30-04-2010 à 10:02:07  profilanswer
 

n°1988983
olivthill
Posté le 30-04-2010 à 10:25:25  profilanswer
 

Bonjour,
 
En lisant le titre, j'ai immédiatement pensé à fopen(), mais en listant la question, je me suis aperçu que ce n'est pas ce que l'on appelle habituellement une ouverture de fichier. En réalité, c'est le lancement de Notepad (bloc-notes) avec un nom de fichier en argument, pour que Notepad (lui, et pas le programme C), aille ouvrir le fichier.
 
Le fichier n'a pas besoin de se trouver sur le bureau. Au contraire, je pense que cela peut compliquer les choses. Je le mettrais plutôt dans un endroit ordinaire, mais en indiquant cet endroit en paramètre de Notepad.
 
Il y a de très nombreuses manières de lancer Notepad :
 
- system() (C run-time library - ANSI ('system()') or Win NT ('_wsystem()'))  
- _exec() et ses variantes (C run-time library - Win 95, Win NT)  
- _spawn() et ses variantes (C run-time library - Win 95, Win NT)  
- WinExec() (Win32 API)  
- ShellExecute() (Shell API)  
- ShellExecuteEx() (Shell API)  
- CreateProcess() (Win32 API)  
- CreateProcessAsUser() (Win32 API)  
- CreateProcessWithLogonW() (Win32 API)
 
Quelle manière utilisez vous ?
 
Vous trouverez trois exemples sur la page du tutoriel http://www.codeguru.com/forum/showthread.php?t=302501
 
EDIT : D'après les messages suivants, fopen() est la solution pour l'ouverture du fichier. Je me suis égaré. Excusez-moi.


Message édité par olivthill le 30-04-2010 à 10:55:16
n°1988989
Chloetone
Posté le 30-04-2010 à 10:30:50  profilanswer
 

Merci pour votre réponse. Voici mon bout de programme qui permet d'ouvrir le fichier:  
 
printf("%s\n","Quel fichier voulez-vous ouvrir?" );
 scanf("%s", &fichier);
donnees = fopen(fichier, "r" );
  if (donnees != NULL)
   {
       fscanf(donnees, "%d", &nombre_atomes);
       printf("%d\n",nombre_atomes);
                     fscanf(donnees, "%d\n" );
 
for (i=0;i<nombre_atomes;i++)
   {
   fscanf(donnees,"%c %f %f %f %d %f %f%f",&molecules[i].type,&molecules[i].x, &molecules[i].y,&molecules[i].z,
          &molecules[i].appartenance,&molecules[i].charge,&molecules[i].vdw_r,&molecules[i].vdw_e);
       
printf("%c %f %f %f %d %f %f%f\n",molecules[i].type, molecules[i].x, molecules[i].y, molecules[i].z,
          molecules[i].appartenance, molecules[i].charge, molecules[i].vdw_r,molecules[i].vdw_e);
         }
 
           printf("\n === Chargement d'une structure moleculaire ===\n" );
 

n°1988992
Chloetone
Posté le 30-04-2010 à 10:32:33  profilanswer
 

Et mon fichier se présente comme ca:  
10
 
C 0.829527 0.000000 -0.463018 1 -0.2 1.908 0.086
H 0.000000 0.000000 0.000000 1 0.05 1.459 0.015
H 0.791576 0.639119 -1.343931 1 0.05 1.459 0.015
H 0.995158 -1.031656 -0.769893 1 0.05 1.459 0.015
H 1.644380 0.321562 0.183924 1 0.05 1.459 0.015
C -5.174024 0.512392 2.994484 2 -0.2 1.908 0.086
H -5.763026 -0.392713 3.135135 2 0.05 1.459 0.015
H -5.687161 1.354788 3.455982 2 0.05 1.459 0.015
H -4.196551 0.384975 3.457337 2 0.05 1.459 0.015
H -5.049357 0.702518 1.929481 2 0.05 1.459 0.015
 
Dans la boucle for, je dis en fait à l'ordinateur à quoi correspondent les données du fichier: la première information (1ère colonne) est le type d'atome (oxygène, carbone...), la deuxième colonne correspond à la coordonnée selon x, etc etc...

n°1989006
olivthill
Posté le 30-04-2010 à 11:00:57  profilanswer
 

Donc le bloc-note n'a rien à voir dans tout ça. C'est une ouverture ordinaire, donc avec fopen().
Cette fonction retourne un indicateur de type FILE *, que l'on nomme souvent "fp", comme file pointer, mais qui est bizarrement nommé ici "donnees", pourquoi pas. Il semble que le problème est qu'il est nul, et donc que le reste ne se fait pas. Dans ce cas, c'est parce que le nom du fichier n'a pas été passé correctement. Il faut donner un fichier qui se trouve dans le même dossier (répertoire) que le programme, ou bien, il faut donner un nom de fichier qui contient le chemin.

n°1989009
Chloetone
Posté le 30-04-2010 à 11:06:36  profilanswer
 

Ok. Mon programme C est sur mon bureau, donc je mets le fichier sur mon bureau. Mais ca ne marche pas. Il s'appelle ch4_ch4.xyz, il est de type XYZ, je n'arrive pas à comprendre pourquoi ca ne marche pas. Si je place mon programme dans le dossier LCC, ils me mettent ce message lors de la compilation: C:\lcc\bin\make.exe: Don't know how to make c:\users\chloe\desktop\info.c
 
Mon programme s'appelle info.c

n°1989042
olivthill
Posté le 30-04-2010 à 12:05:24  profilanswer
 

Le type xyz n'a pas d'importance, puisque le fichier est ouvert par fopen() avec le nom du fichier qui contient le type. Il n'est pas ouvert par un shell qui associe le type avec un certain type de programme.
 
La premiere étape est de créer un fichier exécutable. Est-ce que vous êtes parvenu à crérer votre fichier info.exe ou pas (si vous ne voyez pas les extensions, réglez votre Explorer pour qu'il affiche les extensions en allant dans les options) ? Que vous y soyez arrivé en mettant info.c sur le bureau ou ailleurs, n'a pas d'importance. Mais personnellement, je ne mettrais rien sur le bureau, sauf des icones de raccourci vers des applications.
 
Le bon usage est de se créer un répertoire de développement. On y met les fichiers : sources, info.c, info.h s'il existe, etc. Ensuite, on compile dans ce répertoire.


Message édité par olivthill le 30-04-2010 à 12:06:40
n°1989045
Chloetone
Posté le 30-04-2010 à 12:10:12  profilanswer
 

Lorsque j'ai téléchargé LCCWIN 32, automatiquement un dossier LCC s'est mis sur mon bureau. Lorsque j'ouvre Lccwin, je crée un nouveau projet, je lui donne un nom et le mets à un endroit dans mon ordinateur. C'est tout ce que je fais. Je ne sais pas comment créer un fichier éxecutable. Le répertoire dont vous parlez, c'est le dossier LCC qui est sur mon bureau, non?

n°1989118
olivthill
Posté le 30-04-2010 à 14:31:36  profilanswer
 

C'est plus clair.
 
Je ne connais pas LCC, mais j'espère que d'autres le connaissent et vous répondront.
 
L'expression "créer un exécutable" est équivalente à "faire une compilation qui se passe bien". C'est la même chose.

n°1989135
Chloetone
Posté le 30-04-2010 à 14:48:39  profilanswer
 

Ok, merci beaucoup quand meme =)

mood
Publicité
Posté le 30-04-2010 à 14:48:39  profilanswer
 

n°1989176
breizhbugs
Posté le 30-04-2010 à 15:44:11  profilanswer
 

Chloetone a écrit :

Merci pour votre réponse. Voici mon bout de programme qui permet d'ouvrir le fichier:  
 
printf("%s\n","Quel fichier voulez-vous ouvrir?" );
 scanf("%s", &fichier);
donnees = fopen(fichier, "r" );


Comment déclares tu fichier?

n°1989182
Chloetone
Posté le 30-04-2010 à 15:57:54  profilanswer
 

Je le déclare comme ca:
char fichier[20];

n°1989206
tpierron
Posté le 30-04-2010 à 17:05:16  profilanswer
 

Chloetone a écrit :

Je le déclare comme ca:
char fichier[20];


Hmm, c'est pas beaucoup, j'allouerais 128 ou 256 cases. Et sinon as-tu conscience que "%s" dans scanf s'arrête au premier espace trouvé ? Genre si tu entres "C:/Document and settings/xyz/Desktop/fichier.txt" (un drag'n drop de ton fichier sur la fenêtre DOS), tu vas avoir "C:/Document" dans fichier[]. Utilise à la place fgets: fgets(fichier, sizeof fichier, stdin);


Message édité par tpierron le 30-04-2010 à 17:05:29
n°1989248
Chloetone
Posté le 30-04-2010 à 19:08:58  profilanswer
 

"Fichier" est seulement le nom du fichier, c'est pour ca que 20 caractères sont suffisants. Normalement ca devrait fonctionner car sur les ordis de la fac ca marche. C'est pas grave


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

  Ouverture d'un fichier

 

Sujets relatifs
Ouverture et enregistrement d'un fichier xlsFichier .bat ouverture sur toutes les sessions
Ouverture/lecture dans un fichier texte Access VBAOuverture fichier excel
Ouverture d'un fichier dans une application swingProblème Ajax d'ouverture d'un fichier en attachement
[Access 97] Ouverture d'un fichier .emlJava lenteur ouverture fichier Excel
Ouverture d'un fichier en mode ajoutParamètres pour fichier bat a l'ouverture de session
Plus de sujets relatifs à : Ouverture d'un fichier


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