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

Framework .NET Discussion :

Comment charger un fichier en mémoire ?


Sujet :

Framework .NET

  1. #1
    Membre habitué Avatar de Capt. Flame
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 196
    Points
    196
    Par défaut Comment charger un fichier en mémoire ?
    Bonjour,

    J'aimerais récupérer un fichier en mémoire et, une fois chargé, qu'il ne garde pas de référence au fichier lui-même. Voici ce que je voudrais faire:

    - Création d'un fichier temporaire
    - Ouverture du fichier dans une variable
    - Suppression physique du fichier tout en le gardant actif en mémoire.

    Je ne sais pas quel objet pourrait être traité comme un fichier sans avoir une référence sur un fichier physique.

    Je sais que ça peut paraître étrange mais j'ai des raisons de devoir faire de cette façon qui seraient un peu long à expliquer ici...

    Merci de votre aide,
    - Capt.

    Proverbe Shadok:
    S'il n'y a pas de solutions, il n'y a pas de problèmes

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    bonjour,
    je te donne le lien de la qui traite des fichiers .. tu devrais trouver ton bonheur ...

    http://faqcsharp.developpez.com/?page=file
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  3. #3
    Membre habitué Avatar de Capt. Flame
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 196
    Points
    196
    Par défaut
    Merci pour ta réponse.

    Tu dois probablement faire référence à la rubrique "Comment charger une image tout en libérant les ressources ?". J'avais effectivement consulté la FAQ avant de faire mon post. Malheureusement, le fichier que je voudrais utiliser peut-être de différent type (txt, xml, pdf, doc, gif, ...). L'objet devrait être "Générique".

    Merci,
    - Capt.

    Proverbe Shadok:
    S'il n'y a pas de solutions, il n'y a pas de problèmes

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    Si ton fichier contient du texte tu fait un streamreader sur tout le fichier
    (par exemple si tu as un csv tu creés une arrayliste et avec le streamreader tu la remplis ... )

    donc la tu as ton fichier en mémoire et apres tu le deletes

    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
    22
    23
    24
    25
     
    public static ArrayList lectureFichier(string fichierpath) 
    { 
    	ArrayList Fichier = new ArrayList();
    	try 
    	{ 
    		StreamReader monStreamReader = new StreamReader(fichierpath); 
    		string ligne = monStreamReader.ReadLine(); 
    		while (ligne != null) 
    		{ 
    			string [] tab = ligne.Split(';');
    			for(int i = 0 ; i < tab.Length ; i++)
    			{
    				Fichier.Add(tab[i]);
    			}
    			ligne = monStreamReader.ReadLine(); 
    		} 
    	monStreamReader.Close(); 
    	} 
    	catch 
    	{
    		Fichier.Add("Erreur");
    	} 
    return(Fichier);
    }
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  5. #5
    Membre habitué Avatar de Capt. Flame
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 196
    Points
    196
    Par défaut
    Merci encore pour ta réponse rapide...

    Effectivement, c'est l'objet StreamReader que j'utilise présentement. Par contre, dans mon cas j'utilise la méthode ReadToEnd() de l'objet pour charger l'ensemble du fichier dans une variable string.

    Une fois de plus, ceci peut très bien fonctionner pour des fichiers de type texte ou encore xml mais deux problèmes se posent à moi. Premièrement, si le fichier est un gif, un zip ou un pdf par exemple, je ne peux pas le traiter comme un fichier texte. Deuxièmement, j'aimerais pouvoir traiter l'objet comme si c'était un fichier et utiliser, par exemple une méthode save().

    Merci,
    - Capt.

    Proverbe Shadok:
    S'il n'y a pas de solutions, il n'y a pas de problèmes

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    tiens essaies ca :

    http://msdn.microsoft.com/library/fr...classtopic.asp
    si ca ne t'aide pas n'hesites pas
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    [C#] 
    using System;
    using System.IO;
    using System.Text;
     
    class MemStream
    {
        static void Main()
        {
            int count;
            byte[] byteArray;
            char[] charArray;
            UnicodeEncoding uniEncoding = new UnicodeEncoding();
     
            // Create the data to write to the stream.
            byte[] firstString = uniEncoding.GetBytes(
                "Invalid file path characters are: ");
            byte[] secondString = uniEncoding.GetBytes(
                Path.InvalidPathChars);
     
            using(MemoryStream memStream = new MemoryStream(100))
            {
                // Write the first string to the stream.
                memStream.Write(firstString, 0 , firstString.Length);
     
                // Write the second string to the stream, byte by byte.
                count = 0;
                while(count < secondString.Length)
                {
                    memStream.WriteByte(secondString[count++]);
                }
     
                // Write the stream properties to the console.
                Console.WriteLine(
                    "Capacity = {0}, Length = {1}, Position = {2}\n",
                    memStream.Capacity.ToString(), 
                    memStream.Length.ToString(), 
                    memStream.Position.ToString());
     
                // Set the position to the beginning of the stream.
                memStream.Seek(0, SeekOrigin.Begin);
     
                // Read the first 20 bytes from the stream.
                byteArray = new byte[memStream.Length];
                count = memStream.Read(byteArray, 0, 20);
     
                // Read the remaining bytes, byte by byte.
                while(count < memStream.Length)
                {
                    byteArray[count++] = 
                        Convert.ToByte(memStream.ReadByte());
                }
     
                // Decode the byte array into a char array 
                // and write it to the console.
                charArray = new char[uniEncoding.GetCharCount(
                    byteArray, 0, count)];
                uniEncoding.GetDecoder().GetChars(
                    byteArray, 0, count, charArray, 0);
                Console.WriteLine(charArray);
            }
        }
    }
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  8. #8
    Membre habitué Avatar de Capt. Flame
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 196
    Points
    196
    Par défaut
    hummmm...

    Ça sonne pas mal pour moi ça... Je vais regarder ce MemoryStream. Merci beaucoup pour ton aide...

    Je vais tester ça et revenir avec mes résultats...

    Merci beaucoup,
    - Capt.

    Proverbe Shadok:
    S'il n'y a pas de solutions, il n'y a pas de problèmes

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    Attent de voir si ca marche avant de remercier

    bonne chance
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  10. #10
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par Capt. Flame
    Je ne sais pas quel objet pourrait être traité comme un fichier sans avoir une référence sur un fichier physique.
    T'as un problème de conception des choses.
    Un fichier c'est un ensemgble de données physiquement présentes dans un système de fichier, donc sur un disque dur.
    Si tu as un fichier en mémoire, ce n'est plus un fichier, c'est des données.

    Donc en fait, tu veux juste charger des données ? Bah il est où le pb ? Quand tu créé une string, tu créé bien une donnée en mémoire, non ?
    Après un fichier complet c'est soit une grande string, soit un tableau de lignes (string aussi). Ou si ton fichier est binaire, un tableau de byte.

  11. #11
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Il existe d'ailleurs les méthodes suivantes :

    File.ReadAllBytes
    File.ReadAllLines
    File.ReadAllText

    La première étant uniquement disponible depuis le framework 2.0
    Pas de questions techniques par MP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/07/2006, 16h22
  2. Réponses: 2
    Dernier message: 14/04/2006, 11h20
  3. Comment charger un fichier 3d ..
    Par Happy dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/09/2005, 09h18
  4. [Forms6i] Comment charger les fichiers du client ?
    Par patmaba dans le forum Forms
    Réponses: 10
    Dernier message: 31/01/2005, 16h17
  5. [Dexplore] Comment charger des fichiers d'aide ?
    Par Laurent Dardenne dans le forum Windows
    Réponses: 5
    Dernier message: 04/01/2005, 17h38

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