Fermer un fichier et supprimer les /n

Résolu
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 10 janv. 2012 à 15:41
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 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.

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 07:53
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
1
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
11 janv. 2012 à 10:07
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 10:48
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
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
11 janv. 2012 à 10:50
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 11:14
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
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
11 janv. 2012 à 11:23
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é.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 11:37
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
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
11 janv. 2012 à 11:53
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é.
0
Rejoignez-nous