Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2436 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  lire un fichier texte utilisé par un autre processus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lire un fichier texte utilisé par un autre processus

n°1713200
warenbe
j'ai faim o_O
Posté le 05-04-2008 à 17:52:18  profilanswer
 

hello
 
voila mon souci:
 
un serveur de jeu cree un fichier et ecrit dedans... moi je veux lire ce fichier
donc en toute logique j'ai fais un simple  

Code :
  1. File.ReadAllLines(fichier);


qui me retourne un tableau de string pour chaque ligne
super ça marche
 
je lance le serveur, et boum ça marche plus. logique le serveur utilise ce fichier pour y stoquer des donnnées
seulement je viens de me rendre compte que si mon programme ne peut pas lire le fichier, NOTEPAD.EXE lui le peut
je vois mal notepad comme une appli genial super cool qui outrepasse les securité de windows
 
donc voila ma question:
comment s'y prend le notepad pour lire le fichier alors que mon appli se mange une exception?
 
 
ps: une de mes solutions consiste à copier ce fichier (la copie avec File.Copy() marche meme si le fichier est deja utilise) mais il est gros et donc ça fait lagguer le serveur..


---------------
mon feedback: http://forum.hardware.fr/hfr/Achat [...] 8120_1.htm
mood
Publicité
Posté le 05-04-2008 à 17:52:18  profilanswer
 

n°1713269
MagicBuzz
Posté le 06-04-2008 à 02:27:11  profilanswer
 

File.ReadAllLines() est un peu bourrin, et demande un accès exclusif au fichier pour tourner.
 
Il te faut donc passer par un FileStream, qui va te permettre de choisir les accès que tu veux t'accaparer, et ceux que tu admets pendant ton utilisation du fichier.
 
En gros, tu vas t'accaparer "Read" uniquement, et accepter "Read/Write".
 
Attention cependant, c'est pas forcément très heureux de manipuler un fichier qui est modifié par un autre process.

n°1713270
MagicBuzz
Posté le 06-04-2008 à 02:54:06  profilanswer
 

Par exemple :

Code :
  1. using System;
  2. using System.Windows.Forms;
  3. using System.IO;
  4. using System.Text;
  5.  
  6. namespace SandBox
  7. {
  8.    public partial class Form1 : Form
  9.    {
  10.        FileStream sr;
  11.        Timer t;
  12.        const int BUFFER_SIZE = 8192;
  13.  
  14.        public Form1()
  15.        {
  16.            InitializeComponent();
  17.            
  18.            sr = new FileStream("c:\\in\\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
  19.  
  20.            t = new Timer();
  21.            t.Interval = 2000;
  22.            t.Tick += new EventHandler(t_Tick);
  23.  
  24.            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
  25.        }
  26.  
  27.        private void button1_Click(object sender, EventArgs e)
  28.        {
  29.            if (!t.Enabled)
  30.            {
  31.                t.Start();
  32.            }
  33.            else
  34.            {
  35.                sr.Seek(0, SeekOrigin.Begin);
  36.                textBox1.Text = string.Empty;
  37.                t.Stop();
  38.            }
  39.        }
  40.  
  41.        private void t_Tick(object sender, EventArgs e)
  42.        {
  43.            byte[] buff = new byte[BUFFER_SIZE];
  44.            int read = 0;
  45.            while (true)
  46.            {
  47.                read = sr.Read(buff, 0, BUFFER_SIZE);
  48.                if (read == 0) break;
  49.                textBox1.Text += Encoding.Default.GetString(buff, 0, read);
  50.            }
  51.        }
  52.  
  53.        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  54.        {
  55.            try
  56.            {
  57.                if (t.Enabled) t.Stop();
  58.                sr.Close();
  59.            }
  60.            finally
  61.            {
  62.                sr.Dispose();
  63.            }
  64.        }
  65.    }
  66. }


 
Ca marche avec un fichier texte que je modifie depuis Notepad. Lorsque j'enregistre avec notepad, j'ai bien ma textbox qui s'allimente avec les modifications.
 
Attention toutefois, comme je dis, c'est mal dans le cas où ton fichier rétréchis. Dans mon cas, tu ne verras rien tant que je fichier n'aura pas de nouveau dépassé la dernière taille connue, et seulement ce qui dépasse de cette taille sera visible.
 
en gros, si j'ai dans mon fichier au début :
 


toto va à la plage


 
puis que je modifie en :
 


toto va à la ville faire des courses


 
Ca donne :
 


toto va à la plage faire des courses


Message édité par MagicBuzz le 06-04-2008 à 02:59:16
n°1713309
warenbe
j'ai faim o_O
Posté le 06-04-2008 à 12:57:34  profilanswer
 

ok  
j'avais essayé avec un filestream justement, mais j'avais pas mis le parametres FileShare.ReadWrite
 
merci en tout cas, je testerai ça tout a l'heure :)


---------------
mon feedback: http://forum.hardware.fr/hfr/Achat [...] 8120_1.htm
n°1713314
warenbe
j'ai faim o_O
Posté le 06-04-2008 à 13:14:05  profilanswer
 

ps: mon fichier ne retrecis pas! il augmente plutot ^^ donc ça gene pas ta solution ^^


---------------
mon feedback: http://forum.hardware.fr/hfr/Achat [...] 8120_1.htm
n°1713445
MagicBuzz
Posté le 06-04-2008 à 19:49:44  profilanswer
 

le problème, c'est pas trop qu'il rétrécisse ou non, c'est surtout que ce qui est écrit dedans, il ne faut plus jamais y toucher, uniquement rajouter des trucs à la fin (écritures en append uniquement)

n°1714056
warenbe
j'ai faim o_O
Posté le 07-04-2008 à 23:01:40  profilanswer
 

yep
j'ai testé ça marche super bien :)
 
ce que je fais de toute maniere c'est just lire les dernier caracteres du fichier (1000 derniers caracteres) donc je teste juste la taille et zou
j'ecris pas dedans :)
 
merci en tout cas


---------------
mon feedback: http://forum.hardware.fr/hfr/Achat [...] 8120_1.htm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  lire un fichier texte utilisé par un autre processus

 

Sujets relatifs
insérer une ligne dans le fichierPHP : générer un fichier PDF côté serveur et l'imprimer côté client
lien hypertext vers un fichier sur un serveur qui ne fonctionne pasOpération automatique sur fichier txt coté serveur!
[PHP] fonction ftp_ pour déplacer un fichierRécupérer le nombre de caractère d'un texte ?
récupérer les donnees d'un fichier ds 1 tableau pythonTransférer un fichier dans 170 dossiers !
Vecteur dans fichierFiltrage de type de fichier dans la fenetre d'upload
Plus de sujets relatifs à : lire un fichier texte utilisé par un autre processus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR