begin process at 2008 07 05 21:22:02
1 205 340 membres
309 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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...
  • signaler à un administrateur
    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.

  • signaler à un administrateur
    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...

  • signaler à un administrateur
    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

    ++

  • signaler à un administrateur
    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 !!!

  • signaler à un administrateur
    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

  • signaler à un administrateur
    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?

  • signaler à un administrateur
    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

  • signaler à un administrateur
    Commentaire de Juntao le 09/01/2004 14:25:52

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

  • signaler à un administrateur
    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: ";

  • signaler à un administrateur
    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.

  • signaler à un administrateur
    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)

  • signaler à un administrateur
    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

  • signaler à un administrateur
    Commentaire de BruNews le 09/01/2004 19:26:32 administrateur CS

    elles sont mignonnes les doc.

  • signaler à un administrateur
    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

  • signaler à un administrateur
    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.

  • signaler à un administrateur
    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

  • signaler à un administrateur
    Commentaire de Juntao le 25/02/2004 15:27:32

    @moragndetoi

    Merci pour l'info sur la fct open :)

    ++

  • signaler à un administrateur
    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

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS