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

VB.NET Discussion :

écrire dans un fichier tampon


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut écrire dans un fichier tampon
    Bonjour,

    je lis le contenu d'un fichier text à l'aide de StreamReader et je copie son contenu en modifiant certaines choses vers un autre fichier en utilisant StreamWriter => comment faire pour que le flux de sortie soit stoqué en RAM et non pas écrit directement sur le disque dur (je veux lire mon fichier, modifier des caractères puis seulement après écrire dans le fichier de sortie (disque dur)) ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Avec un MemoryStream par exemple. Tu peux toujours créer un StreamWriter par dessus (plus pratique pour écrire du texte) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ms As New MemoryStream()
    Dim wr As New StreamWriter(ms)
    Ensuite, pour écrire dans un fichier le contenu du MemoryStream, tu peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim file As New FileStream(chemin, FileMode.OpenOrCreate, FileAccess.Write)
    ms.WriteTo(file)
    file.Close()

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    ok,
    est-ce que c'est bien comme ça qu'il faut faire ?

    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
     
    ' réduit la taille d'un fichier .htm
    Sub FichierTexte(ByVal NomFichier_in As String, ByVal NomFichier_out As String)
        Dim sr_in As StreamReader
        Dim ms_out As MemoryStream
        Dim sw_out As StreamWriter
    	Dim file_out As New FileStream(NomFichier_out, FileMode.OpenOrCreate, FileAccess.Write)
     
    	Dim myEncoding As Encoding
        Dim sLine As String
    	Dim BaliseHTMLFinish As Boolean = true
     
     
    	myEncoding = Encoding.GetEncoding("iso-8859-1") 'défini l'encodage des caractères
     
    	sr_in = New StreamReader(NomFichier_in, myEncoding) ' ouverture du fichier
    	'myEncoding = sr_in.CurrentEncoding ' récupère l'encodage du fichier source
    	'msgbox(myEncoding.EncodingName)
     
    	ms_out = New MemoryStream() ' création d'un flux tampon
    	'sw_out = New StreamWriter(NomFichier_out, false, myEncoding) ' création d'un nouveau fichier
    	'sw_out = New StreamWriter(ms_out, false, myEncoding) ' création du flux de sortie (fichier)
    	sw_out = New StreamWriter(ms_out) ' création du flux de sortie (fichier)
     
    	sLine = sr_in.ReadLine() ' lecture de la première ligne
    	While Not sLine Is Nothing ' on balaye tout le fichier
    		sLine = sLine.Replace("	", "") ' suppression des tabulations
    		sLine.Trim() ' supprime les espaces en début et fin de chaine
     
    		'If sLine <> "" Then ' écrit la ligne que si elle est vide
    		If String.IsNullOrEmpty(sLine) <> true Then ' écrit la ligne que si elle est vide
     
    			If BaliseHTMLFinish = false then 'detecte si la ligne précédente ne se terminait pas par une balise html
    				sw_out.Write(" ") ' on insère un espace (sert si par exemple on écrit un paragraphe sur plusieurs lignes)
    			End If
     
    			sw_out.WriteLine(sLine) ' écriture de la ligne modifiée
    			'sw_out.Write(sLine) ' écriture de la ligne modifiée sans retours à la ligne
     
    			If sLine.EndsWith(">") = true then 'detecte si la ligne termine par une balise html
    				BaliseHTMLFinish = true
    			Else
    				BaliseHTMLFinish = false
    			End If
    		End If
     
    		sLine = sr_in.ReadLine() ' lecture d'une ligne
    	End While
     
    	ms_out.WriteTo(file_out)
     
    	file_out.Close() ' fermeture du fichier
    	sr_in.Close() ' fermeture du fichier
    	ms_out.Dispose() ' vide la consomation mémoire du flux
    	'sw_out.Dispose() ' vide la consomation mémoire du flux
     
    	msgbox("Operation terminée")
    End Sub
    aussi comment fait-on pour définir l'encodage du fichier de sortie ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Emcy Voir le message
    ok,
    est-ce que c'est bien comme ça qu'il faut faire ?
    Oui
    Par contre je vois pas bien l'intérêt dans ton cas...

    Citation Envoyé par Emcy Voir le message
    aussi comment fait-on pour définir l'encodage du fichier de sortie ?
    Ben c'est déjà fait au niveau du StreamWriter qui écrit sur le MemoryStream. Dans le MemoryStream, ce sont des données binaires, donc l'encodage n'a pas de sens.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Par contre je vois pas bien l'intérêt dans ton cas...
    => dans certaines conditions, je n'écrirai pas sur le disque dur

    Citation Envoyé par tomlev Voir le message
    Ben c'est déjà fait au niveau du StreamWriter qui écrit sur le MemoryStream. Dans le MemoryStream, ce sont des données binaires, donc l'encodage n'a pas de sens.
    ben pourtant mon programme ne fonctionne pas correctement => les caractères spéciaux ne s'affichent pas correctement (avant quand j'utilisais StreamWriter directement, je n'avais pas de problème car je définissais le format de sortie de l'element StreamWriter mais là avec MemoryStream,
    je ne sais pas trop comment faire)

    => c'est bon j'ai trouvé, il fallait remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sw_out = New StreamWriter(ms_out)
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sw_out = New StreamWriter(ms_out, myEncoding)
    Par contre, y a t-il moyen de connaitre automatiquement le format d'encodage des caractères du fichier ouvert en lecture (ça doit être possible car certains logiciels comme notepad++ le font) ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Emcy Voir le message
    Par contre, y a t-il moyen de connaitre automatiquement le format d'encodage des caractères du fichier ouvert en lecture (ça doit être possible car certains logiciels comme notepad++ le font) ?
    Certaines surcharges du constructeur de StreamReader prennent en paramètre un bool detectEncodingFromByteOrderMarks... ça sert peut-être à ça mais j'ai pas testé

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

Discussions similaires

  1. Créer et écrire dans un fichier.txt
    Par Furius dans le forum VBScript
    Réponses: 11
    Dernier message: 16/05/2016, 12h27
  2. Ouvrir et écrire dans un fichier .txt en T-SQL
    Par joul's dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 27/10/2008, 21h04
  3. [FTP] Lire et écrire dans un fichier
    Par dj-julio dans le forum Langage
    Réponses: 49
    Dernier message: 12/01/2006, 11h59
  4. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48
  5. [JAR] Comment écrire dans un fichier properties dans un jar
    Par Alec6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/10/2004, 15h16

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