Ouverture d'un fichier

Ouverture d'un fichier - C - Programmation

Marsh Posté le 30-04-2010 à 10:02:07    

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...

Reply

Marsh Posté le 30-04-2010 à 10:02:07   

Reply

Marsh Posté le 30-04-2010 à 10:25:25    

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
Reply

Marsh Posté le 30-04-2010 à 10:30:50    

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" );
 

Reply

Marsh Posté le 30-04-2010 à 10:32:33    

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...

Reply

Marsh Posté le 30-04-2010 à 11:00:57    

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.

Reply

Marsh Posté le 30-04-2010 à 11:06:36    

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

Reply

Marsh Posté le 30-04-2010 à 12:05:24    

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
Reply

Marsh Posté le 30-04-2010 à 12:10:12    

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?

Reply

Marsh Posté le 30-04-2010 à 14:31:36    

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.

Reply

Marsh Posté le 30-04-2010 à 14:48:39    

Ok, merci beaucoup quand meme =)

Reply

Marsh Posté le 30-04-2010 à 14:48:39   

Reply

Marsh Posté le 30-04-2010 à 15:44:11    

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?

Reply

Marsh Posté le 30-04-2010 à 15:57:54    

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

Reply

Marsh Posté le 30-04-2010 à 17:05:16    

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
Reply

Marsh Posté le 30-04-2010 à 19:08:58    

"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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed