IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

mapper un fichier en mémoire + acces


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Par défaut mapper un fichier en mémoire + acces
    Bonjour je souhaite mapper en mémoire un fichier texte de plus de 216000 lignes
    pour avoir un temps de traitement plus rapide
    et pouvoir extraire la n iémé ligne dans un variable string ou ansistring

    comment puis-je proceder?
    merci beaucoup

  2. #2
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    As-tu essayé de faire un Memo1->Lines->LoadFromFile avec ce gros fichier ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Il y a un exemple qui m'as l'air assez simple ici et qui corresponds à peu près au même besoin que toi:
    http://www.codeproject.com/file/findidaddressbook.asp

    Memory mapped Files
    C'est une technique très intéressante pour lire les gros fichiers, car on peut ainsi se déplacer dans le fichier aussi facilement que dans un buffer avec à la différence des fonctions classiques de lecture de fichier des performances nettement supérieures.

    yarp
    www.senosoft.com

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Par défaut
    Merci pour vos réponses

    quelqun peut mettre un exemple pour mapper toto.txt par exemple?
    car c'est trop compliquer a comprendre le site en anglais

    merci encore!

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Il n'y a pratiquement que du code dans l'article et fort peu de commentaires. Donc tout ce qu'on peut faire est un copier/coller du code.
    La fonction findidaddressbook comporte tout le code nécessaire et suffisant pour faire un File Mapping:

    CreateFile : Ouvre le fichier
    CreateFileMapping & MapViewOfFile : créent le mapping sur le buffer du fichier (buf dans l'exemple)
    UnmapViewOfFile & CloseHandle : libération

    Le plus intéressant est la boucle for ou l'on charge un tableau (al) avec le contenu de buf (du fichier donc). Il te suffit d'enlever le code de relatif au regsitre, d'adapter la boucle for à ton besoin, d'ouvrir Toto.txt au lieu de pathw.

    yarp
    www.senosoft.com

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 20
    Par défaut
    Bonsoir a tous !
    Je reviens sur mon topic car je n'y arrive toujour pas

    voici mon code assez lent sans le fichier mappé je voudrait le meme mais avec un fichier mappé pour que ca aille plus vite pour des fichiers de 300 000 lignes

    pour situer le contexte j'ai une listbox qui contient 1,2,3.....300000 qui correspond a la ligne souhaitée dans le fichier txt .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    IndexNom=ListNom->ItemIndex+1;
    int Compteur = -1;
     
     ifstream Fichier(MonFichier.c_str(),ios::in);
     
     while(Compteur < IndexNom)
                     {
     
                     // recupère la ligne courante
                    istringstream LigneExtraite(Lecture.c_str());
                    Fichier.getline(Ligne,100);
                    Lecture=Ligne;
                    Compteur++;
     
                    LigneExtraite>>Nom>>Param1>>Param2>>Param3>>Param4>>Param5;
     
                   }
     
                    Fichier.close();
     
                    // algo qui traite les parametre de la ligne selectionnée
    si quelqun peut m'aider maper le fichier et a travailler avec ce fameux fichier en gardant le meme principe en extrayant dans l'operateur >>

    d'apres les messages precedent je doit commencer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    hFile1 = CreateFile ((char *)MonFichier.c_str(),GENERIC_READ,FILE_SHARE_READ,
                              NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        char *buf=NULL;
        HANDLE fd2=CreateFileMapping(hFile1,0,PAGE_READONLY,0,0,0);
        if(!fd2) {
            CloseHandle(hFile1);
     
        }
     
        buf=(char *)MapViewOfFile(fd2,FILE_MAP_READ,0,0,0);
        if(!buf) {
            CloseHandle(fd2);
            CloseHandle(hFile1);
        }
    ?

Discussions similaires

  1. Comment mapper un "gros" fichier en mémoire ?
    Par Fab62_ dans le forum C++
    Réponses: 4
    Dernier message: 15/05/2008, 14h55
  2. Réponses: 6
    Dernier message: 19/09/2005, 15h35
  3. Réponses: 4
    Dernier message: 04/09/2005, 23h57
  4. Serveur de fichier Samba - problème accès Win XP
    Par rohstev dans le forum Réseau
    Réponses: 2
    Dernier message: 10/06/2005, 08h10
  5. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo