Fermer un fichier et supprimer les /n [Résolu]

theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 10 janv. 2012 à 15:41 - Dernière réponse : theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention
- 11 janv. 2012 à 11:53
Bonjour tous le monde (encore lui !)

alors voila, j'ai quasiment terminé mon petit projet perso, mais j'ai des souçis bête comme d'habitude. J'ouvre une lecture de fichier avec

string[] Sad_ip = File.readAllline(path)


mais avec ce procédé, comment le ferme t'on ? Ou suis-je obligé d'utilisé Stream ? Car comme je l'utilise dans une boucle, il met renvoi l’exception " le fichier est déjà utilisé" et deuxième soucis, je supprime des lignes dans un fichier, et je met Empty sur les Environnement.Newline mais il trouve toujours une ligne dans le fichier lorsque tous a été supprimé.

plus parlant (j’espère) voici le code :
ps: Merci de votre indulgence, si le code est mal structuré ou autre, je suis encore, hélas, un débutant en la matière, on dira que ce n'est qu'une version bêta .

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net.NetworkInformation;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //recupère le nom du dossier et le concat
            string sName = @"C:\Users\Administrateur\AppData\Roaming\Thunderbird\Profiles";
            string path = @"C:\listes.txt";

            string sPrefs = "user_pref(" + ""ldap_2.autoComplete.directoryServer"" + "," + ""ldap_2.servers.Carnetmaj"" + ");" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.autoComplete.useDirectory"" + ", true);" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.01NEUILLY_1.description"" + "," + ""01-NEUILLY"" + ");" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.01NEUILLY_1.dirType"" + ", 2);" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.01NEUILLY_1.filename"" + "," + ""impab.mab"" + ");" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.01Neuilly.position"" + ", 0);" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.02COLMAR.description"" + "," + ""02-COLMAR"" + ");" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.02COLMAR.dirType"" + ", 2);" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.02COLMAR.filename"" + "," + ""impab-1.mab"" + ");" + Environment.NewLine +
                            "user_pref(" + ""ldap_2.servers.NEUILLY.position"" + ", 0);";

            string[] dirs = Directory.GetDirectories(sName);
            string sDirect_name = "";

            foreach (string dir in dirs)
            {
                if (dir.EndsWith(".default"))
                {
                    sDirect_name = dir;
                }
            }
            string sFichier = sDirect_name + @"\impab.mab";
            string sFichier1 = sDirect_name + @"\impab-1.mab";

            //crée l'ip
            string sIp = "192.168.2.";
            int iTimeout = 120;

            //buffer pour le ping (32bytes)
            string sData = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] bBuffer = Encoding.ASCII.GetBytes(sData);

            //Debut
            if (File.Exists(sFichier) && File.Exists(sFichier1))
            {
                if (File.Exists(path))
                {
                    StreamReader file = new StreamReader(path);
                    int Ilines = File.ReadAllLines(path).Length;

                    if (file.ReadLine() != null)
                    {
                        file.Close();
                        for (int i = 0; i < Ilines; i++)
                        {
                            //cree l'@IP en fonction du fichier txt
                            string[] Sad_ip = File.ReadAllLines(path);
                            //Fermer le fichier ?????????????????????????????????????
                            Ping pingSender = new Ping();
                            PingReply reply = pingSender.Send(Sad_ip[i], iTimeout, bBuffer);

                            if (reply.Status == IPStatus.Success)
                            {
                                //recuperer le nom aleatoire du dossier et y copie le fichier si ping ok
                                //et verifie si le dossier exist
                                string sName_dist = "\\\" + Sad_ip[i] + @"\Profiles";

                                if (Directory.Exists(sName_dist))
                                {
                                    string[] dirs_dist = Directory.GetDirectories(sName_dist);
                                    string sDirect_name_dist = "";

                                    foreach (string dir_dist in dirs_dist)
                                    {
                                        if (dir_dist.EndsWith(".default"))
                                        {
                                            sDirect_name_dist = dir_dist;
                                        }
                                    }
                                    File.Delete(@"\" + sDirect_name_dist + @"impab.mab");
                                    File.Delete(@"\" + sDirect_name_dist + @"impab-1.mab");
                                    File.Copy(sFichier, @"\" + sDirect_name_dist + @"\impab.mab", true);
                                    File.Copy(sFichier1, @"\" + sDirect_name_dist + @"\impab-1.mab", true);

                                    StreamWriter sw = new StreamWriter(@"\" + sDirect_name_dist + @"\prefs.js", true);
                                    sw.WriteLine(sPrefs);
                                    sw.Close();

                                    Sad_ip[i] = string.Empty;

                                    StreamWriter del = new StreamWriter(path);
                                    del.WriteLine(Sad_ip[i]);
                                    //Sad_ip[i] = Sad_ip[i].Replace(Environment.NewLine, String.Empty);

                                    richTextBox1.Text += "CA MARCHE AVEC LISTE" + Environment.NewLine;
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                    }
                }
                else
                {
                    for (int i = 145; i < 146; i++)
                    {
                        //cree ip et lance requete icmp
                        string Sad_ip = sIp + i;
                        Ping pingSender = new Ping();
                        PingReply reply = pingSender.Send(Sad_ip, iTimeout, bBuffer);

                        if (reply.Status == IPStatus.Success)
                        {
                            //recuperer le nom aleatoire du dossier et y copie le fichier si ping ok
                            //et verifie si le dossier exist
                            string sName_dist = "\\\" + Sad_ip + @"\Profiles";

                            if (Directory.Exists(sName_dist))
                            {
                                string[] dirs_dist = Directory.GetDirectories(sName_dist);
                                string sDirect_name_dist = "";

                                foreach (string dir_dist in dirs_dist)
                                {
                                    if (dir_dist.EndsWith(".default"))
                                    {
                                        sDirect_name_dist = dir_dist;
                                    }
                                }

                                richTextBox1.Text += Environment.NewLine + "ca marche " + i + Environment.NewLine;
                                File.Delete(@"\" + sDirect_name_dist + @"\impab.mab");
                                File.Delete(@"\" + sDirect_name_dist + @"\impab-1.mab");
                                File.Copy(sFichier, @"\" + sDirect_name_dist + @"\impab.mab", true);
                                File.Copy(sFichier1, @"\" + sDirect_name_dist + @"\impab-1.mab", true);

                                StreamWriter sw = new StreamWriter(@"\" + sDirect_name_dist + @"\prefs.js", true);
                                sw.WriteLine(sPrefs);
                                sw.Close();

                                richTextBox1.Text += "CA MARCHE" + Environment.NewLine;
                            }
                        }
                        else
                        {
                            StreamWriter sw = new StreamWriter("C:\\listes.txt", true);
                            sw.WriteLine(Sad_ip);
                            sw.Close();

                            richTextBox1.Text += "CA MARCHE PAS" + Environment.NewLine;
                        }
                    }
                }
            }
        }
    }
}




hésitez pas à me donner des conseil pour le code etc..
Merci d'avance.

Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 07:53
3
Merci
ReadAllLine ouvre le fichier, récupère le contenu, ferme fichier et Split les lignes...

ton message d'erreur vient de ta ligne au dessus :
StreamReader file = new StreamReader(path);

même vide, tu recevra surement une ligne (String vide)...
suffit de tester la longueur de la chaine lue...

sprefs
pourquoi faire tant de concaténations (autour des guillemets)


Allez, un peu de ménage pour commencer la journée :

using System;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e) {
            //recupère le nom du dossier et le concat
            string sFolder = Path.Combine(Application.UserAppDataPath, @"Roaming\Thunderbird\Profiles");
            string fichier_listes = @"C:\listes.txt";

            foreach (String s in Directory.GetDirectories(sFolder, "*.default"))
                sFolder = s;

            string sFichier = Path.Combine(sFolder, "impab.mab");
            string sFichier1 = Path.Combine(sFolder, "impab-1.mab");

            if (File.Exists(sFichier) && File.Exists(sFichier1))
                if (File.Exists(fichier_listes)) {
                    String[] IPs = File.ReadAllLines(fichier_listes);
                    for (int i=0; i s.Trim() != string.Empty).ToArray());
                } else
                    for (int i=145; i < 146; i++) { // Curieuse boucle... ne fera qu'un tour de manège...
                        //cree ip et lance requete icmp
                        string IP = "192.168.2." + i;
                        if (!ProcessIP(IP, sFichier, sFichier1)) // Le Ping n'a pas fonctionné... on ajoute l'IP a la liste
                            File.AppendText(fichier_listes).WriteLine(IP);
                    }
        }

        private static bool ProcessIP(String IP, string sFichier, string sFichier1){
            if (IP.Length > 0) {
                const int iTimeout = 120;
                byte[] bBuffer = new byte[32];
                PingReply reply = new Ping().Send(IP, iTimeout, bBuffer);
                if (reply.Status == IPStatus.Success) {
                    String sName = Path.Combine(@"\" + IP, "Profiles");
                    if (Directory.Exists(sName)) {
                        string sDirect_name_dist = String.Empty;
                        foreach (String s in Directory.GetDirectories(sName, "*.default"))
                            sDirect_name_dist = s;

                        if (sDirect_name_dist.Length != 0) {
                            File.Copy(sFichier, Path.Combine(@"\" + sDirect_name_dist, "impab.mab"), true);
                            File.Copy(sFichier1, Path.Combine(@"\" + sDirect_name_dist, "impab-1.mab"), true);

                            string sPrefs = "user_pref("ldap_2.autoComplete.directoryServer","ldap_2.servers.Carnetmaj");" + Environment.NewLine +
                                            "user_pref("ldap_2.autoComplete.useDirectory", true);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.01NEUILLY_1.description","01-NEUILLY");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.01NEUILLY_1.dirType", 2);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.01NEUILLY_1.filename","impab.mab"" + ");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.01Neuilly.position", 0);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.02COLMAR.description","02-COLMAR");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.02COLMAR.dirType", 2);" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.02COLMAR.filename","impab-1.mab");" + Environment.NewLine +
                                            "user_pref("ldap_2.servers.NEUILLY.position", 0);";

                            File.WriteAllText(Path.Combine(@"\" + sDirect_name_dist, "prefs.js"), sPrefs);
                            return true;
                        }
                    }
                }
            }
            return false;
        }
    }
}



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Renfield
theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 11 janv. 2012 à 10:07
0
Merci
Salut Renfield.

Alors déjà merci beaucoup pour tous ça.
Mon code était si mauvais ? (je suis tous triste)

La boucle étrange n'a qu'un tour car de Multi ping est beaucoup plus long qu'un seul , c’était juste pour tester.

Pour sPref , effectivement vu comme ça, y'avait pas besoin d'autant de concat, je n'ai pas su le voir comme cela.

Donc merci pour ce code propre, faut juste que je comprenne un peu certaine fonction, pars que y'a des endroits où je suis un peu perdu.

Merci encore .

Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
Commenter la réponse de theflayer
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 10:48
0
Merci
Mauvais ?

non, pas tant, mais simplifiable ^^

faut s'éviter de multiplier n fois le meme code...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 11 janv. 2012 à 10:50
0
Merci
Petite question , je pense avoir compris le code que tu m'as fait, c'est nettement plus simple comme ça et beaucoup moins répétitif ! Par contre pour :

 string sFolder = Path.Combine(Application.UserAppDataPath, @"Roaming\Thunderbird\Profiles"); 


si j'ai bien compris avec msdn, ça renvoie le chemin d'accès complet de du dossier appData de l'utilisateur concerné, ce qui m’évite comme j'avais fait d'utiliser un partage local, c'est ça ?

mais quand je l’exécute :

Impossible de trouver une partie du chemin d'accès 'C:\Users\Administrateur\AppData\Roaming\WindowsFormsApplication1\WindowsFormsApplication1\1.0.0.0\Roaming\Thunderbird\Profiles\'.

pourquoi me met-il ca ? (en Gras)

Voila c'est tous le reste ça va je pense.
Merci merci.


Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
Commenter la réponse de theflayer
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 11:14
0
Merci
je n'ai pas testé mon code...
j'ai peut etre pas utilisé la bonne propriété...

mais on ne doit pas mettre :

C:\Users\Administrateur\AppData

en dur, c'est la finalité

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 11 janv. 2012 à 11:23
0
Merci
Oui c'est mieu comme ça .

Je suis entrain de lire tous l'article msdn pour essayer de comprendre.
Mais je comprend pas pourquoi il met met le dossier de mon programme dans mon chemin d'accès . 'fin bon je vais finir par trouver.

Merci de ton aide et je te souhaite une bonne journée.


-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas été.
Commenter la réponse de theflayer
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 11:37
0
Merci
je comprend pas pourquoi


simplement :
Si aucun chemin d'accès n'existe, un chemin d'accès est alors créé au format suivant :

Chemin d'accès de base\CompanyName\ProductName\ProductVersion



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
theflayer 125 Messages postés dimanche 28 février 2010Date d'inscription 21 juin 2015 Dernière intervention - 11 janv. 2012 à 11:53
0
Merci
Oui j'ai bien vu ça, mais le chemin existe et j'ai testé avec les droits en admin.
'fin pour l'instant j'ai fais autrement.

Sinon c'est pas un soucis ça fonctionne parfaitement .
Je t’embête plus, merci encore.


-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas été.
Commenter la réponse de theflayer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.