begin process at 2012 05 27 20:21:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > LECTURE / ECRITURE DES FICHIERS EN C ( ACCÉS DE BAS NIVEAU )

LECTURE / ECRITURE DES FICHIERS EN C ( ACCÉS DE BAS NIVEAU )


 Information sur la source

 Description

lecture / ecriture des fichiers en C ( accés de bas niveau )
l exemple lit le fichier dont le nom est demandé dans le programme et il passe en majuscule les lettres qui ne le sont pas...

Source

  • #include <iostream>
  • #include <unistd.h>
  • #include <stdio.h>
  • #include <fcntl.h>
  • #include <stdlib.h>
  • using namespace std;
  • void AfficheFichier(char* nom)
  • {
  • char buffer; // caractere lus
  • long fichier; // identifiant du fichier
  • char nlus;
  • // on ouvre le fichier en lecture/ecriture
  • fichier=open(nom,O_RDWR);
  • if(fichier==-1)
  • {
  • //erreur d ouverture
  • perror("open");
  • exit(1);
  • }
  • else
  • {
  • //lecture du buffer
  • nlus=read(fichier,&buffer,sizeof(buffer));
  • while(nlus!=0)
  • {
  • // on ecrit un caractere "buffer" au format C
  • printf("%c",buffer);
  • if((buffer>='a')&&(buffer<='z'))
  • {
  • // on recule d un caractere dans le fichier
  • lseek(fichier,-1,SEEK_CUR);
  • // on passe le caractere en majuscule
  • buffer=buffer-'a'+'A';
  • // on ecrit le buffer dans le fichier
  • write(fichier,&buffer,sizeof(buffer));
  • }
  • // lecture du buffer
  • nlus=read(fichier,&buffer,sizeof(buffer));
  • }
  • close(fichier);
  • }
  • }
  • int main(int argc,char* argv[])
  • {
  • char nom [50];
  • cout<<"Entrez le nom du fichier: ";
  • // on lit une chaine de caracteres "nom" au format C
  • scanf("%s",nom);
  • AfficheFichier(nom);
  • exit(0);
  • }
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
using namespace std;

void AfficheFichier(char* nom)
{
char buffer;    // caractere lus
long fichier;   // identifiant du fichier
char nlus;
// on ouvre le fichier en lecture/ecriture
fichier=open(nom,O_RDWR);  
if(fichier==-1)
{
	//erreur d ouverture
	perror("open");
	exit(1);
}
else
{
	//lecture du buffer
	nlus=read(fichier,&buffer,sizeof(buffer));
	while(nlus!=0)
	{
		// on ecrit un caractere "buffer" au format C
		printf("%c",buffer);
		if((buffer>='a')&&(buffer<='z'))
		{
			// on recule d un caractere dans le fichier
			lseek(fichier,-1,SEEK_CUR);
			// on passe le caractere en majuscule
			buffer=buffer-'a'+'A';
			// on ecrit le buffer dans le fichier
			write(fichier,&buffer,sizeof(buffer));
		}
		// lecture du buffer
		nlus=read(fichier,&buffer,sizeof(buffer));
	}
	close(fichier);
}
}
int main(int argc,char* argv[])
{
char nom [50];
cout<<"Entrez le nom du fichier: ";
// on lit une chaine de caracteres "nom" au format C
scanf("%s",nom);
AfficheFichier(nom);
exit(0);
}


 Conclusion

il faut que le fichier lu soit dans le meme repertoire que le programme...


 Sources du même auteur

CLASSE FILE UTILISANT UN TABLEAU
CLASSE PILE UTILISANT UN TABLEAU
VOIE PARALLELE COUPLEUR MC 68230 IMPRIMANTE SOUS LINUX
CALCUL PUISSANCE PAR FONCTION RECURSIVE
CALCUL FACTORIEL PAR FONCTION RECURSIVE

 Sources de la même categorie

COMPTER LE NOMBRE DE PAGES D'UN FICHIER PDF par Renfield
Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel

Commentaires et avis

Commentaire de BruNews le 07/01/2004 18:41:28 administrateur CS

Si tu lis octet par octet un gros fichier + deplacement en cas de minuscule, ben faudra pas etre presse.
Charge dans un buffer par passe de 1 Mo et traite en memoire.

Commentaire de morgandetoi06 le 07/01/2004 19:30:43

c juste un petit tp d info de 1ere année de bts on fait avec ce qu on sait faire...

Commentaire de Juntao le 08/01/2004 18:13:32

Dans quel header se trouve la fonction "open" ?? unistd.h ??
Pq ne po avoir utilise fopen ??
Quelle est la difference entre les 2  ??

Il est possible d'utiliser les namespaces en C ??

Merci

++

Commentaire de Matt67 le 08/01/2004 19:27:16

C'est du C, du C++, un mixage ???
cout, scanf, on sait plus ou on en est !!!

Commentaire de morgandetoi06 le 08/01/2004 20:54:23

ah oué pour le cout j ai pas fait expres, enfin ici quand je parle de C et pas de C++ c juste pour l acces aux fichiers apres le reste on s en fout c juste pour faire un exemple

Commentaire de djl le 08/01/2004 22:06:06

lol, yen a qui s'en foute trop pas
pourquoi tu utilise iostream et le namespace std?

Commentaire de morgandetoi06 le 08/01/2004 22:47:22

si tu avait lu mon dernier commentaire tu aurait compris...
quand je dit "C" c pour ce qui concerne les fichiers, le reste c juste pour l exemple donc limite on s en fout

Commentaire de Juntao le 09/01/2004 14:25:52

Cela dit, ca ne repond po a mes questions :(

Commentaire de morgandetoi06 le 09/01/2004 16:33:36

Juntao&gt;
-open est dans fcntl.h
-me suis pas servi de fopen pasque fopen c un acces de haut niveau et il fallait du bas niveau
-normalement en C on ne peut pas se servir de using namespace std; comme le cout que j ai laissé trainer.

pour avoir un code purement C il faut degager
#include &lt;iostream&gt;
using namespace std;
cout&lt;&lt;"Entrez le nom du fichier: ";

Commentaire de BruNews le 09/01/2004 16:50:48 administrateur CS

Il n'y a pas d'acces fichier ni autre peripherique qui soit de BAS niveau en C/C++. Pour acceder en bas niveau il faut se servir de l'API du systeme hote.

Commentaire de djl le 09/01/2004 19:13:00

si, les acces sont bien de bas niveau avec les fonctions posix de l'entete unistd.h(c'est ce qui est dit dans la doc)

Commentaire de Juntao le 09/01/2004 19:24:26

Qu'est ce que vous entendez par haut et bas niveau ??
Qu'est ce que l'un fait plus que l'autre ??

Merci

Commentaire de BruNews le 09/01/2004 19:26:32 administrateur CS

elles sont mignonnes les doc.

Commentaire de morgandetoi06 le 09/01/2004 21:51:42

mes profs d'infos m'ont donné un policopié sur les fichiers et ils parlent bien d acces de bas et haut niveau donc à mon avis ils l'on pas inventé
voila un aperçu de la doc:
http://loulou06.9online.fr/doc.jpg

Commentaire de BruNews le 09/01/2004 22:11:17 administrateur CS

De toutes les manieres faut rien croire, ecris les 2 façons et compile en tirant le listing asm du compilo. Tu regardes et si aucun des 2 ne produit un appel direct sur API du systeme alors nenni bas niveau et t'es pas oblige de le dire a tes profs.

Commentaire de NW4O le 24/02/2004 11:03:33

Apparament c'est juste un exemple mais mieux vaut prévenir quand meme : NE JAMAIS UTILISER scanf() ! Et si la personne entre une chaine de plus de 50 caractères ? BufferOverFlow garanti !
Mieux vaut utiliser fgets(chaine,50,stdin);

NW

Commentaire de Juntao le 25/02/2004 15:27:32

@moragndetoi

Merci pour l'info sur la fct open :)

++

Commentaire de Arnotic le 27/10/2005 20:48:14 administrateur CS

Si tu veux être un peu plus bas niveau que fopen ou autre : http://www.cppfrance.com/code.aspx?ID=28146. Les APIs Natives (direct ntdll.dll) : ZwCreateFile, ...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales