Bonjour et bienvenue à nouveau.
Dans cette conférence, je veux parler de l'accès aux fichiers.
Ainsi, les fichiers sur le disque ont un nom et les règles de dénomination des
fichiers sont déterminées par votre système d'exploitation.
Vous devrez peut-être ajuster les noms en fonction du système d'exploitation
que votre programme exécute.
Si votre programme s'exécute sous Windows par rapport à Linux, la structure
réelle des répertoires est également différente.
Donc, si vous utilisez des barres obliques ou des barres obliques inverses, vous
devez ajuster cela dans votre programme.
Mais pour la plupart, le les noms ont relativement les mêmes règles
de dénomination et ainsi de suite.
Mais il y a une chance que vous devrez l'ajuster.
Un programme référence un fichier via un pointeur de fichier ou un pointeur de flux.
Puisqu'il fonctionne sur plus qu'un simple fichier, vous pouvez en
fait, nous l'avons mentionné plus tôt, mais la norme Les fonctions io fonctionnent sur n'importe quel appareil.
Donc ça s'appelle un pointeur de fichier, mais cela devrait vraiment être appelé
un pointeur de flux.
Vous associez un pointeur de fichier avec un fichier par programme lorsque
votre programme est exécuté.
Alors ce que tu finis par faire c'est que tu créer un pointeur
à l'intérieur de votre programme, il sera de type fichier et cela va représenter le fichier lorsque vous
le lirez et l'écrivez.
Nous utilisons ces pointeurs de fichier comme un moyen plus efficace de pointer vers les fichiers plutôt
que au nom car le nom peut être
un peu différent.
Le pointeur représentera ce qu'il indique réellement.
Et vous pouvez réutiliser les pointeurs, pour pointer vers différents fichiers
à différentes occasions, ce qui, là encore, était représenté par le nom du fichier.
Un pointeur de fichier pointe vers une structure fichier de type qui représente un flux.
Tu peux vraiment aller regarder à la structure du fichier pour voir tout
ce qui s'y trouve.
Mais il contient des informations telles comme si vous voulez lire ou
écrire ou mettre à jour le fichier, le adresse du tampon en mémoire où
vous stockez les données, un pointeur vers la position actuelle dans
le fichier pour l'opération suivante.
Nous avons mentionné que la position est important parce que
c'est là que vous écrivez et lisez.
Et vous pouvez définir toutes ces informations à l'intérieur de la structure à l'aide d'opérations
sur les fichiers d'entrée et de sortie.
Les opérations du fichier de sortie d'entrée, lorsque vous ouvrez un fichier, il va
en fait spécifier si vous voulez lire ou écrire.
Et puis aussi vous pouvez changer le position actuelle en utilisant d'autres méthodes
comme la recherche, etc. dont nous allons parler.
Si vous souhaitez utiliser plusieurs fichiers simultanément dans votre programme, vous
devez créer un pointeur de fichier pour chaque fichier.
Vous ne pouvez réutiliser que le fichier pointeur si vous lisez et écrivez à
des moments différents.
Il y a une limite au nombre d'ouvertures fichiers que vous pouvez avoir en même temps.
Vous pouvez regarder la limite dans le standard IO, il y
a une constante définie f open max it all dépend à nouveau du système d'exploitation
sur lequel vous utilisez.
Mais vous ne voulez généralement pas créer et ouvrez une tonne de fichiers à la fois.
L'écriture et la lecture des fichiers est une opération coûteuse car vous écrivez sur
le disque dur.
Ce n'est pas aussi rapide que d'écrire la
mémoire, donc cela prend du temps et cela peut entraîner pour être moins réactif.
Tu ne veux pas en avoir 10 fichiers s'ouvrent et
écrivent à 10 fichiers en même temps.
Pour ouvrir un fichier, ce serait soyez la première étape que vous
faites avant de lire et d'écrire.
Vous souhaitez donc associer un nom de fichier
externe avec un pointeur final complet à travers un processus appelé ouverture du fichier.
La façon dont vous ouvrez un fichier et voyez si vous appelez la fonction f open.
Cela renverra le fichier pointeur que vous pouvez ensuite
utiliser pour lire et écrire.
Et encore une fois, le pointeur de fichier est va pointer vers un
fichier externe spécifique qui se trouve sur le disque.
F ouvert va prendre le nom du fichier.
La f ouverte est ce que vous devez faire avant de faire toute lecture / écriture.
C'est généralement votre première opération.
Et comme avec la plupart de ces fonctions, ils sont tous définis dans standardio. h.
Voici la définition de l'appel ouvert.
Tu verras que le retour value est un pointeur de fichier,
tout est en majuscules, la structure du fichier.
Donc, tout fichier en majuscules.
Vous remarquerez alors qu'il faut un quelques paramètres, il prend un nom
et un mode et ne vous inquiétez pas pour ça restreindre c'est juste plus de trucs C11.
Ça prend vraiment juste le personnage pointeur vers un nom et un mode.
Le premier argument de la fonction est un pointeur vers une
chaîne qui est le nom du fichier, de sorte que sera entre guillemets doubles.
Vous pouvez spécifier le nom explicitement ou utilisez un pointeur de caractère contenant l'adresse de
la chaîne de caractères.
Donc tout cela veut dire que tu pourrais créez une chaîne de caractères et mettez-la
assigner au texte littéral, puis passez la chaîne à la fonction
ou vous pouvez mettre à l'intérieur du double guillemets juste à l'intérieur de l'appel de fonction.
Vous pouvez obtenir le nom du fichier via la ligne de commande
en tant qu'entrée de l'utilisateur ou définissez comme une constante de votre programme.
Si c'est toujours le même fichier vous lisez en écrivant et
le nom n'a pas d'importance, vous peut simplement se référer à une constante.
Si votre programme est plus flexible, il peut obtenir une entrée de l'utilisateur pour dire ce que vous
voulez lire ou écrire.
Le deuxième argument du f ouvert function est une chaîne de caractères
qui représente le mode fichier.
Ceci spécifie ce que vous voulez faire avec le fichier, si
vous voulez le lire, si vous voulez écrire il, si vous souhaitez y ajouter.
Une spécification de mode de fichier est une chaîne de
caractères entre guillemets et je vais montrer vous certains de ceux que nous
allons finir par utiliser beaucoup.
En supposant que l'appel à f ouvert est réussi, il renverra ce
pointeur de fichier, en majuscules.
Et puis vous pouvez utiliser ce fichier pointeur pour appeler d'autres fonctions d'entrée / sortie dans
l'en-tête d'E / S standard, et nous allons passer par ceux-ci quand nous passerons par
la lecture et l'écriture ou vous pouvez également obtenir la position en utilisant
ce pointeur pour changer le position de l'endroit où vous vous trouvez dans le fichier.
Si le fichier ne peut pas être ouvert pour une raison quelconque, f
open va retourner null.
Alors ce que cela signifie est devant toi commencez à lire ou
à écrire, assurez-vous que le pointeur n'est pas égal à null, un autre si check.
Voici le fichier modes que j'ai mentionnés.
Les modes de fichier, rappelez-vous, sont les deuxième paramètre de l'appel ouvert f.
C'est ce qui spécifie ce que vous voulez faire avec le
fichier, et tout est entre guillemets.
Donc si tu fais un w, ça veut dire que tu veux pour ouvrir le fichier texte pour l'écriture.
Si vous faites un a, cela signifie que vous voulez pour ouvrir le fichier texte à ajouter, toutes les
écritures se font à la fin du fichier.
Si tu fais un r, ça s'ouvre le fichier texte à lire.
Si vous ajoutez un plus à l'un des ceux-ci, il créera essentiellement le
fichier s'il n'existe pas.
Donc, si vous ouvrez un fichier w plus, il l'ouvrira pour la mise à jour et il
tronquera le fichier à zéro s'il existe ou il pourrait créer un nouveau
fichier s'il n'existe pas.
Avec les autres, c'est va écrire ou lire um et le
fichier doit exister.
Pareil avec un plus, ça va s'ouvrir pour l'ajouter, pour une mise à jour, à la
fin du fichier existant ou créez le fichier s'il n'existe pas.
Et le r plus s'ouvrira le fichier texte pour la mise à jour,
il ne va pas créer le fichier là parce qu'il sera vide.
Donc la lecture est juste pour à la fois en lecture et en écriture lorsque
vous voyez le r plus.
Un peu différent de l'autre plus où ils créent réellement
le fichier, il n'existe pas.
Mode d'écriture.
Si vous souhaitez écrire à un fichier texte existant
avec le nom myfile. txt, vous créeriez votre pointeur de fichier, tout en majuscules.
Définissez-le sur null, initialisez-le avec la valeur null.
Et puis tu créerais peut-être votre fichier comme un
autre pointeur de caractère, myfile. txt ou vous pourriez passez-le comme premier paramètre, puis
vous dites simplement f open.
F ouvrir le nom du fichier, puis w à l'intérieur guillemets doubles qui ouvre le fichier pour
l'écriture et renvoie un pointeur de fichier.
C'est pourquoi vous avez un fichier p sur la gauche de l'affectation.
Vous voulez ensuite vérifier pour faire sûr que le fichier p n'est pas égal à null.
Parce que si c'est nul, si c'est n'a pas pu s'ouvrir
pour une raison quelconque, peut-être que le nom du fichier était erroné ou il n'existait pas, alors vous ne
pourriez pas y écrire.
Alors tu veux toujours faire le f vérifiez et imprimez
certaines informations s'il ne s'ouvre pas.
Ce code ouvrira le fichier et il associera le
fichier avec le nom myfile. txt avec votre fichier de pointeurs de fichier fp.
Le mode w signifie que nous ne pouvons qu'écrire dans le fichier, vous ne pouvez pas en lire.
Si un fichier avec le nom mon fichier ce texte
n'existe pas, l'appel à f open créera un nouveau
fichier avec ce nom, et c'est pour f ouvert avec l'option w.
Et donc quand nous avons vu dans le précédent modes, w plus créera le fichier s'il n'existe pas
mais il tronque également le fichier à zéro.
C'est la différence avec le w.
Le w créera s'il n'existe pas, mais cela ne
le tronquera pas à zéro.
C'est donc la méthode standard pour ouvrir des fichiers, en utilisant
ce w à l'intérieur des guillemets doubles.
Si vous ne fournissez que le nom du fichier sans aucune spécification
de chemin, c'est donc ce que nous avons fait dans ce exemple,
un chemin mémorisé est le nom des répertoires.
Si vous ne fournissez pas le nom du répertoires, il va supposer que
ce fichier est dans le répertoire courant partout où le programme s'exécute.
Si vous voulez réellement ouvrir un fichier ailleurs où il
ne se trouve pas réellement le répertoire des programmes, vous devez alors
spécifier le chemin complet.
C'est ce qu'on appelle le chemin absolu.
Lorsque vous ne fournissez aucun chemin, c'est généralement le chemin relatif, il est relatif à l'endroit
où le programme est en cours d'exécution.
Vous pouvez donc spécifier l'un ou l'autre, le absolu ou le
chemin relatif, assurez-vous simplement de savoir où il se trouve et vous faites le bon.
Les chemins relatifs sont généralement meilleurs car alors ce n'est pas dépendant.
Si quelqu'un avait déménagé ce fichier ne dépend pas de
l'endroit où il a été déplacé.
Et vous pouvez réellement faire un chemin relatif, et vous pouvez revenir en arrière dans
les répertoires, vous pouvez donc faire un point slash et c'est relatif à l'endroit où
le programme est exécuté, vous êtes juste remonter quelques répertoires.
Lorsque vous utilisez un absolu chemin, ce serait en fait
quelque chose comme le programme c colon fichiers si vous êtes sur Windows.
Et si ce fichier a jamais bougé, le ne serait pas en mesure de l’ouvrir.
Donc à l'ouverture d'un fichier pour l'écriture le lien du fichier
est tronqué à zéro et la position sera au début de toute donnée
existante pour la première opération.
Toutes les données qui étaient auparavant écrit dans le fichier
sera perdu et écrasé par toute opération d'écriture.
Encore une fois sans fournir le plus, cela signifie simplement que vous ne
pouvez ni lire ni écrire.
Ceci est en écriture uniquement.
W a raison seulement.
W plus signifie que vous pouvez lire et écrire.
Ajouter le mode.
Si vous souhaitez ajouter à un existant fichier texte plutôt que de l'écraser, vous
pouvez spécifier le mode a.
Cela dépend.
Cela positionne le fichier à la fin de toutes les données précédemment écrites.
Si le fichier n'existe pas, il en crée un nouveau.
L'exemple ici est vous juste changez le deuxième paramètre pour qu'il soit un
guillemet double ajoutera à la fin de mon fichier. SMS.
Et n'oubliez pas que vous doit toujours tester la valeur
de retour pour null à chaque fois.
Tu veux toujours faire le si Le fichier p n'est pas égal à null.
Lorsque vous ouvrez un fichier dans append mode, toutes les opérations d'écriture
se feront à la fin des données dans le fichier à chaque opération d'écriture.
Toutes les opérations d'écriture ajoutent données dans le fichier et vous
ne pouvez pas mettre à jour le contenu existant dans ce mode, tout est à la fin.
En mode lecture, nous pouvons ouvrir le fichier pour lire un fichier.
Nous utilisons juste le r entre guillemets doubles.
Ceci est en lecture seule, vous impossible d'écrire dans le fichier.
Si tu fais r plus tu le ferais être capable de lire et d'écrire.
Donc ça ressemble aux autres appels, il suffit de faire un f open, de
passer le nom du fichier puis r en double guillemets qui renvoie un pointeur de fichier.
Nous positionnerons également le fichier au début des données.
Si tu vas juste lire le fichier, il doit déjà exister.
Vous n'allez pas lire un fichier vide.
Il n'y a donc pas d'option de créer le fichier n'existe pas,
il sera juste vide ou vous le récupéreriez l'opposant au dossier serait nul.
Si vous essayez d'ouvrir un fichier pour la lecture n'existe pas,
il renverra le pointeur nul.
S'il existe et qu'il est vide, vous ne retournerez simplement aucune donnée.
Vous voulez toujours vérifier le valeur renvoyée par f open.
Encore une fois, en lisant cela pour le deuxième fois, c'est important.
Parce que si c'est un pointeur nul, votre programme va planter, il
va faire quelque chose de mauvais.
Renommer un fichier.
Nous savons maintenant comment ouvrir un fichier.
Ouvrir un fichier est le premier opération, vous spécifiez le
mode et le nom du fichier.
Cela vous rend le fichier pointeur que vous pouvez maintenant
utiliser pour faire d'autres choses avec.
Renommer un fichier est parfois important.
C'est très facile.
Vous utilisez simplement la fonction de changement de nom.
Il faut un ancien nom et un nouveau name en tant que pointeurs de
caractères constants, et il renvoie un int.
L'entier renvoyé sera être égal à zéro si le changement de nom
a réussi et différent de zéro dans le cas contraire.
Le fichier ne doit pas être ouvert lorsque vous appelez renommer.
Sinon, ça va échouer car il est en cours d'utilisation, vous ne pouvez pas renommer
un fichier lorsqu'il est en cours d'utilisation.
Donc ce que tu peux faire ici c'est que tu peux dites simplement renommer, passez l'ancien nom de fichier et
le nouveau nom de fichier.
Dans cet exemple, nous utilisons un chemin vers un fichier dans Windows.
Et que tu sais que c'est windows parce que je vois deux-points.
Vous remarquez également que le la barre oblique inverse est là deux fois.
La raison en est que le la barre oblique inverse est un caractère spécial dans c.
Backslash n est un retour de ligne.
Backslash r est un retour chariot.
Donc, la barre oblique inverse a une particularité sens dans le programme.
Donc, si vous voulez réellement utiliser le barre oblique inverse pour un chemin dans
un répertoire, ce que fait Windows, vous doivent en fournir deux.
Et donc ici nous renommons un myfile. txt localisant le répertoire
temporaire.
Nous le renommons en soulignant mon fichier copie. texte dans le répertoire de tentative.
Et si ce n'est pas égal à un, il échouera.
Nous imprimons juste un sortie qui dit qu'il a échoué.
Sinon, votre impression est réussie.
Cela va changer le nom de monfichier. txt dans le répertoire temporaire dans ma copie de fichier.
Si le chemin du fichier est incorrect ou le fichier n'existe pas, il
ne pourra pas être renommé.
Vous pouvez également fermer un fichier et vous voulez pour ce faire chaque fois que vous ouvrez un fichier.
Alors quand vous avez fini avec le lui-même, vous voulez
dire au système d'exploitation de libérer ce fichier.
Souviens-toi, il y a une limite au nombre de fichiers
que vous pouvez ouvrir à un moment donné.
Vous pouvez le faire en appelant la fonction f close.
F close accepte un fichier pointeur comme argument.
Rappelez-vous, le pointeur de fichier représente le fichier.
Il renvoie un eof.
Eof est un int.
Renvoie eof si une erreur se produit.
Eof est un personnage spécial appelé le caractère de fin de fichier.
Il est défini dans standardio. h sous forme d'entier négatif.
C'est généralement équivalent à un négatif.
Si f close a réussi, il renverra zéro.
Ainsi, vous pouvez vérifier eof pour échec.
Tu dis juste que je passe près dans le pointeur, vous pouvez ensuite définir le pointeur
sur null et le résultat de l'appel f close est que la connexion entre le
pointeur, le fichier p et le fichier physique est cassé.
Le fichier P ne peut plus être utilisé pour accéder
au fichier pour lire, écrire, ajouter ou renommer.
Si le fichier est en cours d'écriture, le contenu actuel du tampon de sortie est écrit
dans le fichier dans assurez-vous que les données ne sont pas perdues.
Donc tu n'as aucun problème avec l'intégrité des données, vous n'allez
pas fermer le fichier s'il était en cours d'écriture dans un autre thread.
C'est donc sans danger pour les threads.
Nous n'avons pas parlé de fils, c'est un concept plus avancé.
Mais c'est là que tu peux avoir plusieurs points d'exécution dans votre programme.
C'est une bonne pratique de programmation pour fermer un fichier dès que vous en
avez terminé, tout comme c'est une bonne pratique de programmation pour libérer
de la mémoire lorsque vous avez terminé avec lui, même chose pour la fermeture des fichiers.
Il protège contre la perte de données de sortie.
Vous devez également fermer un fichier avant de tenter de le
renommer ou de le supprimer, il doit être fermé, il ne peut pas être ouvert.
Que diriez-vous de supprimer un fichier.
Vous pouvez supprimer un fichier en appel de la fonction de suppression.
Ceci est également déclaré dans standardio. h.
Toutes les opérations sur les fichiers sont déclaré en standard. ioh.
Tu peux toujours aller voir ça fichier d'en-tête si vous
voulez où les fichiers d'en-tête c sont installés.
Alors tu dis juste supprimer nom du fichier.
Ici tu n'as pas à utilisez le pointeur de fichier.
Tu peux juste dire parce que le fichier n'a
pas besoin d'être ouvert pour le supprimer.
La même chose avec le changement de nom car vous ne voulez pas que les fichiers soient
ouverts car le renommer ou la suppression échouera.
Il va supprimer le fichier qui porte le nom myfile. txt du répertoire
courant.
Ceci fournit un chemin relatif.
Il va chercher ce fichier partout où le programme s'exécute.
Sinon, vous devez fournir un chemin absolu.
Le fichier ne peut pas être ouvert lorsque vous essayez de le supprimer, tout comme renommer.
Vous devriez toujours vérifier avec des opérations qui suppriment des fichiers.
Vous pourriez détruire votre système si vous ne le faites pas.
Une suppression est très chère, opération très dangereuse.
La suppression de fichiers peut entraîner des problèmes.
Donc sois prudent.
Toutes les informations de cette conférence avait à voir avec l'accès aux fichiers, comment vous
pouvez ouvrir des fichiers, qui est ce que vous devez faire avant de
lire et d'écrire, et aussi comment vous peut supprimer et renommer les fichiers, puis les fermer lorsque
vous avez terminé de les utiliser.
Tout est basé hors de ce pointeur de fichier.
Alors comprenez ce pointeur de fichier et la structure qu'il contient.
Des trucs assez utiles.
L'en-tête io standard contient toutes les bonnes informations.
Prochaines conférences, nous allons pour parler de
lecture et d'écriture dans des fichiers texte, en ajoutant en fait données ou en les ajoutant ou en les lisant.
Merci. J'espère que cela a été utile.