mvc open pdf in browser : Extract image from pdf application SDK cloud windows wpf azure class c15-part878

303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 151 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Code : C
#include "main.h" // Inclusion du .h qui contient les prototypes et structures
int main(int argc, char *argv[])
{
struct Coordonnees point; // Création d'une variable appelée "point" de type Coordonnee
return 0;
}
Nous avons ainsi créé une variable "point" de type Coordonnees. Cette variable est automatiquement composée de 2 sous-variables : x et
y (son abscisse et son ordonnées). 
On est obligés de mettre le mot "struct" lors de la définition de la variable ?
Oui, cela permet à l'ordinateur de différencier un type de base (comme "int") d'un type personnalisé, comme "Coordonnees". 
Toutefois, les programmeurs trouvent un peu lourd de mettre le mot "struct" à chaque définition de variable personnalisée. Pour régler
ce problème, ils ont inventé une instruction spéciale : le typedef. 
Le typedef
Retournons dans le fichier .h qui contient la définition de notre structure Coordonnees. 
Nous allons ajouter une instruction appelée typedef qui sert à créer un alias de structure, c'est-à-dire à dire que telle chose est 
équivalente à écrire telle autre chose. 
Nous allons ajouter une ligne commençant par typedef juste avant la définition de la structure : 
Code : C
typedef struct Coordonnees Coordonnees;
struct Coordonnees
{
long x;
long y;
};
Cette ligne doit être découpée en 3 morceaux (non je n'ai pas bégayé le mot "Coordonnees" 
) : 
typedef : indique que nous allons créer un alias de structure.
struct Coordonnees : c'est le nom de la structure dont vous allez créez un alias (c'est-à-dire un "équivalent").
Coordonnees : c'est le nom de l'équivalent. 
En clair, cette ligne dit "Ecrire le mot Coordonnees est désormais équivalent à écrire struct Coordonnees". En faisant cela, vous n'aurez
plus besoin de mettre le mot struct à chaque définition de variable de type Coordonnees. 
On peut donc retourner dans notre main et écrire tout simplement : 
Code : C
int main(int argc, char *argv[])
{
Coordonnees point; // L'ordinateur comprend qu'il s'agit de "struct Coordonnees" grâce
au typedef
return 0;
}
Je vous recommande de faire un typedef comme je l'ai fait ici pour le type Coordonnees. La plupart des programmeurs font comme cela.
Ca leur évite d'avoir à écrire le mot "struct" partout, et vu que ce sont des feignasses ça les arrange 
(je rigole hein les gars, tapez
pas 
Extract image from pdf - Select, copy, paste PDF images in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
how to extract images from pdf in acrobat; extract photos pdf
Extract image from pdf - VB.NET PDF Image Extract Library: Select, copy, paste PDF images in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
extract jpeg from pdf; extract image from pdf c#
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 152 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Modifier les composantes de la structure
Maintenant que notre variable point est créée, nous voulons modifier ses coordonnées. 
Comment accéder au x et au y de point ? Comme cela : 
Code : C
int main(int argc, char *argv[])
{
Coordonnees point;
point.x = 10;
point.y = 20;
return 0;
}
On a ainsi modifié la valeur de point, en lui donnant une abscisse de 10 et une ordonnée de 20. Notre point se situe désormais à la
position (10 ; 20) (c'est comme cela qu'on note une coordonnée en mathématiques 
Pour accéder donc à chaque composante de la structure, vous devez écrire : 
Code : C
variable.nomDeLaComposante
Le point fait la séparation entre la variable et la composante. 
Si on prend la structure "Personne" de tout à l'heure et qu'on demande le nom et le prénom, , on devra faire comme ça : 
Code : C
int main(int argc, char *argv[])
{
Personne utilisateur;
printf("Quel est votre nom ? ");
scanf("%s", utilisateur.nom);
printf("Votre prenom ? ");
scanf("%s", utilisateur.prenom);
printf("Vous vous appelez %s %s", utilisateur.prenom, utilisateur.nom);
return 0;
}
Code : Console
Quel est votre nom ? Dupont 
Votre prenom ? Jean 
Vous vous appelez Jean Dupont
On envoie la variable "utilisateur.nom" à scanf qui écrira directement dans notre variable "utilisateur". 
On fait de même pour "prenom", et on pourrait aussi le faire pour l'adresse, l'âge et le sexe, mais j'ai la flême de le faire ici (je dois être
programmeur, c'est pour ça 
). 
Vous auriez pu faire la même chose sans connaître les structures, en créant juste une variable nom et une autre "prenom". 
Mais l'intérêt ici est que vous pouvez créer une autre variable de type "Personne" qui aura aussi son propre nom, son propre prénom etc
etc 
On peut donc faire : 
Code : C
Personne joueur1, joueur2;
VB.NET PDF Text Extract Library: extract text content from PDF
Extract highlighted text out of PDF document. Image text extraction control provides text extraction from PDF images and image files.
extract images from pdf file; extract vector image from pdf
C# PDF Text Extract Library: extract text content from PDF file in
Ability to extract highlighted text out of PDF document. Image text extraction control provides text extraction from PDF images and image files.
pdf image extractor online; extract pictures pdf
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 153 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
... et stocker ainsi les informations sur chaque joueur. 
Mais le C, c'est plus fort encore ! On peut créer un tableau de Personne ! 
C'est facile à faire : 
Code : C
Personne joueurs[2];
Et ensuite, vous accédez par exemple au nom du joueur n°0 en tapant : 
Code : C
joueurs[0].nom
L'avantage d'utiliser un tableau ici, c'est que vous pouvez faire une boucle pour demander les infos du joueur 1 et du joueur 2, sans avoir
à répéter 2 fois le même code. Il suffit de parcourir le tableau joueur et de demander à chaque fois nom, prénom, adresse... 
Exercice : créez ce tableau de type Personne et demandez les infos de chacun grâce à une boucle (qui se répète tant qu'il y a des
joueurs). Faites un petit tableau de 2 joueurs pour commencer, mais si ça vous amuse vous pourrez agrandir la taille du tableau plus
tard. 
Affichez à la fin du programme les infos que vous avez recueillies sur chacun des joueurs 
Ce code est facile à écrire, vous n'avez pas besoin de correction, vous êtes des grands maintenant 
Initialiser une structure
Pour les structures comme pour les variables, tableaux et pointeurs, il est vivement conseillé de les initialiser dès leur création pour 
éviter qu'elles ne contiennent "n'importe quoi". En effet, je vous le rappelle, une variable qui est créée prend la valeur de ce qui se
trouve en mémoire là où elle a été placée. Parfois cette valeur est 0, parfois c'est un résidu d'un autre programme qui est passé par là
avant vous et la variable vaut une valeur qui n'a aucun sens, comme -84570. 
Pour rappel, voici comment on initialise : 
Une variable : on met sa valeur à 0 (ça c'est simple).
Un pointeur : on met sa valeur à NULL. NULL est en fait un #define situé dans stdlib.h qui vaut généralement 0, mais on continue
à utiliser NULL par convention sur les pointeurs pour bien voir qu'il s'agit de pointeurs et non de variables ordinaires.
Un tableau : on met chacune de ses valeurs à 0. 
Pour les structures, ça va un peu ressembler à l'initialisation d'un tableau qu'on avait vue. En effet, on peut faire à la déclaration de la
variable : 
Code : C
Coordonnees point = {00};
Cela mettra, dans l'ordre, point.x = 0 et point.y = 0. 
Revenons à la structure Personne (qui contient des chaînes). Vous avez aussi le droit d'initialiser une chaîne en mettant juste "" (rien
entre les guillemets). Je ne vous ai pas parlé de cette possibilité dans le chapitre sur les chaînes je crois, mais il n'est jamais trop tard
pour l'apprendre 
On peut donc initialiser dans l'ordre nom, prenom, adresse, age et garcon comme ceci : 
Code : C
Personne utilisateur = {"""", "", 0, 0};
Toutefois, j'utilise assez peu cette technique personnellement. Je préfère envoyer par exemple ma variable point à une fonction
initialiserCoordonnees qui se charge de faire les initialisations pour moi sur ma variable. 
Toutefois, pour faire cela il faut envoyer un pointeur de ma variable. En effet si j'envoie juste ma variable, une copie en sera réalisée
dans la fonction (comme pour une variable de base) et la fonction modifiera les valeurs de la copie et non celle de ma vraie variable.
Revoyez le "fil rouge" du chapitre sur les pointeurs si vous avez un trou de mémoire à ce sujet 
C# PDF insert image Library: insert images into PDF in C#.net, ASP
C#.NET PDF SDK - Add Image to PDF Page in C#.NET. How to Insert & Add Image, Picture or Logo on PDF Page Using C#.NET. Add Image to PDF Page Using C#.NET.
some pdf image extractor; extract images from pdf online
VB.NET PDF insert image library: insert images into PDF in vb.net
VB.NET PDF - Add Image to PDF Page in VB.NET. Insert Image to PDF Page Using VB. Add necessary references: RasterEdge.Imaging.Basic.dll.
extract image from pdf online; some pdf image extract
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 154 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Il va donc falloir apprendre à utiliser des pointeurs sur des structures (hummm ça donne faim ça 
). 
Nous allons justement voir comment faire ça maintenant 
Pointeur de structure
Un pointeur de structure se crée de la même manière qu'un pointeur de long, de double ou de n'importe quelle autre type de base : 
Code : C
Coordonnees* point = NULL;
On a ainsi un pointeur de Coordonnees appelé "point". 
Comme un rappel ne fera de mal à personne, je tiens à vous répéter que l'on aurait aussi pu mettre l'étoile devant le nom du pointeur,
cela revient exactement au même : 
Code : C
Coordonnees *point = NULL;
Je fais d'ailleurs assez souvent comme cela, car si l'on veut définir plusieurs pointeurs sur la même ligne, on est obligés de mettre l'étoile
devant chaque nom de pointeur : 
Code : C
Coordonnees *point1 = NULL, *point2 = NULL;
Bon, mais ça pour le moment c'est du domaine des pointeurs, ça n'a pas de rapport direct avec les structures 
Envoi de la structure à une fonction
Ce qui nous intéresse ici, c'est de savoir 
comment envoyer un pointeur de structure à une fonction, pour que celle-ci puisse modifier le
contenu de la variable. 
On va faire ceci pour cet exemple : on va juste créer une variable de type Coordonnees dans le main et envoyer son adresse à la
fonction initialiserCoordonnees. Cette fonction aura pour rôle de mettre tous les éléments de la structure à 0. 
Nous faisons cela juste à titre d'exemple. En pratique, il serait plus simple d'initialiser la structure comme on a appris à le faire
un peu plus haut : 
Code : C
Coordonnees point = {0};
Cela mettra tous les éléments de la structure à 0.
Notre fonction initialiserCoordonnees va prendre un paramètre : un pointeur sur une structure de type Coordonnees (un Coordonnees*
donc 
). 
Code : C
int main(int argc, char *argv[])
{
Coordonnees monPoint;
initialiserCoordonnees(&monPoint);
return 0;
}
void initialiserCoordonnees(Coordonnees* point)
C# Create PDF from images Library to convert Jpeg, png images to
Best and professional C# image to PDF converter SDK for Visual Studio .NET. C#.NET Example: Convert One Image to PDF in Visual C# .NET Class.
how to extract images from pdf file; pdf image extractor
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
Page: Extract, Copy and Paste PDF Pages. Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others in C#.NET Program.
extract images from pdf acrobat; extract text from image pdf file
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 155 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
{
// Initialisation de chacun des membres de la structure ici
}
Ma variable monPoint est donc créée dans le main. On envoie son adresse à initialiserCoordonnees qui récupère cette variable sous la
forme d'un pointeur appelé "point" (on aurait d'ailleurs pu l'appeler n'importe comment dans la fonction, même "monPoint" ou
"trucBidule" 
). 
Bien, et maintenant que nous sommes dans initialiserCoordonnees, nous allons initialiser chacune des valeurs une à une. 
Il ne faut pas oublier de mettre une étoile devant le nom du pointeur pour accéder à la variable. Si vous ne le faites pas, vous risquez de
modifier l'adresse, et ce n'est pas ce que nous voulons faire 
Oui mais voilà, problème... On ne peut pas vraiment faire : 
Code : C
void initialiserCoordonnees(Coordonnees* point)
{
*point.x = 0;
*point.y = 0;
}
C'aurait été trop facile bien entendu 
Pourquoi on ne peut pas faire ça ? Parce que le point de séparation s'applique sur le mot "point" et non *point en entier. Or, nous ce
qu'on veut c'est accéder à *point pour en modifier la valeur. 
Pour régler le problème, il faut mettre des parenthèses autour de *point. Comme cela, le point de séparation s'appliquera à *point et
non juste à point : 
Code : C
void initialiserCoordonnees(Coordonnees* point)
{
(*point).x = 0;
(*point).y = 0;
}
Voilà 
Ce code fonctionne, vous pouvez tester. La variable de type Coordonnees a été transmise à la fonction qui a initialisé x et y à 0. 
En C, on initialise généralement nos structures avec la méthode simple qu'on a vue plus haut. 
En C++ en revanche, les initialisations sont plus souvent faites dans des "fonctions". 
Nous n'en sommes pas encore à étudier le C++, mais vous verrez que, lorsque nous y arriverons, le C++ n'est en fait rien d'autre
qu'une sorte de "super-amélioration" des structures. Bien entendu, beaucoup de choses découleront de cela, mais nous les 
étudierons en temps voulu. En attendant, je tiens à vous rappeler de vous concentrer sur le C, car tout ce que vous apprenez
ici vous le réutiliserez avec le C++ 
Un raccourci pratique et très utilisé
Vous allez voir qu'on manipulera très souvent des pointeurs de structures. Pour être franc, je dois même vous dire qu'en C on utilise plus
souvent des pointeurs de structures que des structures tout court 
Quand je vous disais que les pointeurs vous poursuivraient jusque dans votre tombe, je ne le disais pas en rigolant 
Vous ne pouvez y 
échapper, c'est votre destinée. 
Hum... 
En fait je voulais vous parler d'un truc sérieux là 
Comme les pointeurs de structures sont très utilisés, on sera souvent amenés à écrire ceci : 
Code : C
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
example that you can use it to extract all images from PDF document. ' Get page 3 from the document. Dim page As PDFPage = doc.GetPage(3) ' Select image by the
extract pictures from pdf; extract pdf pages to jpg
VB.NET PDF Form Data Read library: extract form data from PDF in
PDF software, it should have functions for processing text, image as well tell you how to read or retrieve field data from PDF and how to extract and get
pdf image extractor c#; online pdf image extractor
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 156 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
(*point).x = 0;
Oui mais voilà, encore une fois les programmeurs trouvent ça trop long. Les parenthèses autour de *point, quelle plaie ! Alors, comme
les programmeurs sont de grosses feignasses (comment ça je l'ai déjà dit ?! 
), il ont inventé le raccourci suivant : 
Code : C
point->x = 0;
Ce raccourci consiste à former une flèche avec un tiret suivi d'un chevron ">". 
Ecrire point->x est donc STRICTEMENT équivalent à écrire (*point).x 
Ca éclaircira votre code vous verrez 
N'oubliez pas qu'on ne peut utiliser la flèche que sur un pointeur ! 
Si vous travaillez directement sur la variable, vous devez utiliser le symbole "point" comme on l'a vu au début.
Reprenons notre fonction initialiserCoordonnes. Nous pouvons donc l'écrire comme ceci : 
Code : C
void initialiserCoordonnees(Coordonnees* point)
{
point->x = 0;
point->y = 0;
}
Retenez bien ce raccourci de la flèche, nous allons le réutiliser et pas qu'une seule fois 
Et surtout, surtout, ne confondez pas la flèche avec le symbole "point". 
La flèche est réservée aux pointeurs, le "point" est réservé aux variables. Utilisez ce petit exemple pour vous en souvenir : 
Code : C
int main(int argc, char *argv[])
{
Coordonnees monPoint;
Coordonnees *pointeur = &monPoint;
monPoint.x = 10// On travaille sur une variable, on utilise le "point"
pointeur->x = 10// On travaille sur un pointeur, on utilise la flèche
return 0;
}
On met le x à 10 de deux manières différentes ici, la première fois en travaillant directement sur la variable, la seconde fois en passant
par le pointeur.
Les énumérations
Les énumérations sont une façon un peu différente de créer ses propres types de variables. 
Une énumération ne contient pas de "sous-variables" comme c'était le cas pour les structures. C'est une liste de "valeurs possibles" pour
une variable. Une énumération ne prend donc qu'une case en mémoire, et cette case peut prendre 
une des valeurs que vous définissez
(et une seule à la fois). 
Voici un exemple d'énumération : 
Code : C
typedef enum Volume Volume;
enum Volume
{
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 157 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
FAIBLE, MOYEN, FORT
};
Vous noterez qu'on utilise un typedef là aussi, comme on l'a fait jusqu'ici. 
Pour créer une énumération, on utilise le mot-clé enum. Notre énumération s'appelle ici "Volume". C'est un type de variable personnalisé
qui peut prendre une des 3 valeurs qu'on a indiquées : soit FAIBLE, soit MOYEN, soit FORT. 
On va pouvoir créer une variable de type Volume, par exemple musique, qui stockera le volume actuel de la musique. 
On peut par exemple initialiser la musique au volume MOYEN : 
Code : C
Volume musique = MOYEN;
Voilà qui est fait 
Plus tard dans le programme, on pourra modifier la valeur du volume et la mettre soit à FAIBLE, soit à FORT. 
Association de nombres aux valeurs
Vous avez remarqué que j'ai mis les valeurs possibles de l'énumération en majuscules. Ca devrait vous rappeler les constantes et les
defines non ? 
En effet, c'est assez similaire mais ce n'est pourtant 
pas exactement la même chose. 
Le compilateur associe automatiquement un nombre à chacune des valeurs possibles de l'énumération. 
Dans le cas de notre énumération Volume, FAIBLE vaut 0, MOYEN vaut 1 et FORT vaut 2. L'association est automatique et commence à 0.
Contrairement au #define, c'est le compilateur qui associe MOYEN à 1 par exemple, et non le préprocesseur. Au bout du compte, ça
revient un peu au même 
Quand on a initialisé la variable musique à MOYEN, on a donc en fait mis la case en mémoire à la valeur 1. 
En pratique, est-ce utile de savoir que MOYEN vaut 1, FORT vaut 2 etc. ?
Non. En général vous vous en moquez 
C'est le compilateur qui associe automatiquement un nombre à chaque valeur. Grâce à ça, vous n'avez plus qu'à faire : 
Code : C
if (musique == MOYEN)
{
// Jouer la musique au volume moyen
}
Peu importe la valeur de MOYEN, vous laissez le compilateur se charger de gérer les nombres. 
L'intérêt de tout ça ? C'est que du coup votre code est très lisible. En effet, tout le monde peut facilement lire le if précédent (on
comprend bien que la condition signifie "Si la musique est au volume moyen"). 
Notez qu'on aurait très bien pu faire ça sans utiliser d'énumération. On aurait par exemple pu créer une variable musique de
type long, et "retenir" que 1 signifie "volume moyen" par exemple. 
Code : C
if (musique == 1)
{
}
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 158 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Mais comme vous le voyez dans l'exemple ci-dessus, c'est moins facile à lire pour le programmeur 
Associer une valeur précise
Pour le moment, c'est le compilateur qui décide d'associer le nombre 0 à la première valeur, puis 1, 2, 3 dans l'ordre. 
Il est possible de demander d'associer une valeur précise à chaque élément de l'énumération. Mais quel intérêt est-ce que ça peut bien
avoir ? 
Eh bien, supposons que sur votre ordinateur le volume soit géré entre 0 et 100 (0 = pas de son, 100 = 100% du son). Il est alors pratique
d'associer une valeur précise à chaque élément : 
Code : C
typedef enum Volume Volume;
enum Volume
{
FAIBLE = 10, MOYEN = 50, FORT = 100
};
Ici, le volume FAIBLE correspondra à 10% de volume, le volume MOYEN à 50% etc. 
On pourrait facilement ajouter de nouvelles valeurs possibles comme MUET. On mettrait dans ce cas MUET à la valeur... 0 ! Bravo vous
avez compris le truc 
La possibilité d'utiliser des types de variables personnalisés est vraiment un atout majeur du langage C. Grâce à
cela, les informations peuvent être regroupées entre elles, centralisées, traitées etc... 
En résumé, nous avons vu : 
Les structures : elles permettent de créer des types de variables 
composés de plusieurs sous-variables.
Les énumérations : elles permettent de créer des types de variables qui peuvent avoir 
une des valeurs définies dans
l'énumération.
Nous ne tarderons pas à utiliser tout cela en pratique 
D'ailleurs, nous commencerons même tout de suite car dans le prochain chapitre nous apprendrons à manipuler une structure de type
Fichier 
Quelques ajouts sur les structures
Avant de terminer ce chapitre, je tiens à faire quelques petits ajouts sur les structures pour vous montrer tout ce qu'on peut faire avec. 
On peut vraiment tout mettre à l'intérieur d'une structure. Je vous ai dit qu'on pouvait mettre des types de base (int, long...) ainsi que
des tableaux, mais sachez qu'il est aussi possible de mettre des pointeurs: 
Code : C
struct MaStructure
{
long* monPointeur; // Pointeur sur long
int monBooleen;
char maChaine[10];
};
Plus fort encore, le C vous autorise à mettre une structure dans une structure : 
Code : C
struct MaStructure
{
Coordonnees element; // MaStructure contient une variable de type Coordonnees !
int monBooleen;
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 159 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
char maChaine[10];
};
Ca a l'air de compliquer un peu à priori, et pourtant c'est justement tout ce qui rend le langage puissant. 
Attention si vous faites ça : il faudra définir la structure Coordonnees avant MaStructure (plus haut dans le fichier), car
sinon le compilateur ne la connaîtra pas au moment de lire MaStructure et il plantera en disant que le type "Coordonnees"
n'existe pas.
Si vous avez une variable appelée "test" de type MaStructure, vous pouvez du coup accéder aux coordonnées de "element" comme ceci : 
Code : C
test.element.x = 0;
test.element.y = 0;
Je vous laisse méditer sur ce dernier code source et imaginer les structures que vous allez pouvoir créer et imbriquer entre elles 
Lire et écrire dans des fichiers
Le défaut avec les variables, c'est qu'elles n'existent que dans la mémoire vive. Une fois votre programme arrêté, toutes vos variables
sont supprimées de la mémoire et il n'est pas possible de retrouver ensuite leur valeur. 
Comment, dans ce cas-là, peut-on enregistrer les meilleurs scores obtenus à son jeu ? 
Comment peut-on faire un éditeur de texte si tout le texte écrit disparaît une fois lorsqu'on arrête le programme ? 
Heureusement, on peut lire et écrire dans des fichiers en langage C. Et ça tombe bien, parce si on n'avait pas pu le faire, nos
programmes auraient été vraiment pauvres 
Les fichiers seront écrits sur le disque dur de votre ordinateur : l'avantage est donc qu'ils restent là même si vous arrêtez le programme
ou l'ordinateur 
Pour lire et écrire dans des fichiers, nous allons avoir besoin de réutiliser tout ce que nous avons appris jusqu'ici : pointeurs, structures,
pointeurs de structures, chaînes de caractères etc. Pour une bonne compréhension de ce chapitre, il faut donc que tout cela soit clair
dans votre tête. Si ce n'est pas le cas, pas de panique : allez relire les chapitres précédents. 
Rien ne presse, apprendre le langage C n'est pas une course. Les meilleurs seront ceux qui y seront allés le plus doucement, donc le plus
sûrement 
Ouvrir et fermer un fichier
Pour lire et écrire dans des fichiers, nous allons nous servir de fonctions situées dans la librairie stdio que nous avons déjà utilisée. 
Oui, cette librairie-là contient aussi les fonctions printf et scanf que nous avons longuement utilisées jusqu'ici ! Mais elle ne contient pas
que ça : il y a aussi d'autres fonctions, notamment des fonctions faites pour travailler sur des fichiers. 
Toutes les librairies que je vous ai fait utiliser jusqu'ici (stdlib.h, stdio.h, math.h, string.h...) sont ce qu'on appelle des
librairies standard. Ce sont des librairies automatiquement livrées avec votre IDE qui ont la particularité de fonctionner sur
tous les OS. Vous pouvez donc les utiliser partout, que vous soyez sous Windows, Linux, Mac ou autre 
Les librairies standard ne sont pas très nombreuses et ne permettent de faire que des choses très basiques, comme ce que
nous avons fait jusqu'ici. Pour faire des choses plus avancées, comme ouvrir des fenêtres, il faudra télécharger et installer de
nouvelles librairies. Nous verrons cela bientôt 
Assurez-vous donc, pour commencer, que vous incluez bien au moins les librairies stdio.h et stdlib.h en haut de votre fichier .c : 
Code : C
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 160 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
#include <stdlib.h>
#include <stdio.h>
Ces librairies sont tellement fondamentales, tellement basiques, que je vous recommande d'ailleurs 
de les inclure dans tous vos futurs
programmes, quels qu'ils soient. 
Bien. Maintenant que les bonnes librairies sont incluses, nous allons pouvoir attaquer les choses sérieuses 
Voici ce qu'il faut faire à chaque fois dans l'ordre quand on veut ouvrir un fichier (que ce soit pour lire ou pour écrire dedans) : 
On appelle la fonction d'ouverture de fichier fopen qui nous renvoie un pointeur sur le fichier. 
On vérifie si l'ouverture a réussi (c'est-à-dire si le fichier existait) en testant la valeur du pointeur qu'on a reçu. Si le pointeur
vaut NULL, c'est que l'ouverture du fichier n'a pas marché, dans ce cas on ne peut pas continuer (il faut afficher un message
d'erreur). 
Si l'ouverture a marché (si le pointeur est différent de NULL donc), alors on peut s'amuser à lire et écrire dans le fichier à travers
des fonctions que nous verrons un peu plus loin. 
Une fois qu'on a terminé de travailler sur le fichier, il faut penser à le "fermer" avec la fonction fclose.
Nous allons dans un premier temps apprendre à nous servir de fopen et fclose. Une fois que vous saurez faire cela, nous apprendrons à
lire le contenu du fichier et à écrire dedans. 
fopen : ouverture du fichier
Dans le chapitre sur les chaînes, nous nous sommes servis des prototypes des fonctions comme de "mode d'emploi". C'est comme ça que
les programmeurs font en général : ils lisent le prototype et comprennent alors le fonctionnement de la fonction (bon, je reconnais que
des fois même eux ont besoin de quelques petites explications à côté 
Voyons voir justement le prototype de la fonction fopen : 
Code : C
FILE* fopen(const char* nomDuFichier, const char* modeOuverture);
Cette fonction attend 2 paramètres : 
Le nom du fichier à ouvrir.
Le mode d'ouverture du fichier, c'est-à-dire une indication qui dit si vous voulez juste écrire dans le fichier, juste lire dans le
fichier, ou les deux à la fois 
Cette fonction renvoie... un pointeur sur FILE 
Eh bien ça les amis, vous devriez comprendre ce que c'est maintenant 
C'est un pointeur sur une structure de type FILE. Cette structure est définie dans stdio.h. Vous pouvez ouvrir ce fichier pour voir de quoi
est constitué le type FILE, mais ça n'a aucun intérêt je vous le dis de suite 
Pourquoi le nom de la structure est-il tout en majuscules (FILE) ? Je croyais que les noms tout en majuscules étaient
réservés aux constantes et aux defines ?
Cette "règle", c'est moi qui me la suis fixée (et pas mal d'autres programmeurs la suivent d'ailleurs). Ca n'a jamais été une obligation.
Force est de croire que ceux qui ont programmé stdio ne suivaient pas exactement les mêmes règles 
Cela ne doit pas vous perturber pour autant. Vous verrez d'ailleurs que les librairies que nous étudierons ensuite respectent les mêmes
règles que moi, à savoir juste la première lettre en majuscule pour une structure. 
Revenons à notre fonction fopen. Elle renvoie un FILE*. Il est extrêmement important de récupérer ce pointeur, pour pouvoir ensuite lire
et écrire dans le fichier. 
Nous allons donc créer un pointeur de FILE au début de notre fonction (par exemple la fonction main) : 
Code : C
int main(int argc, char *argv[])
Documents you may be interested
Documents you may be interested