Help! Probleme pour ecrire dans un fichier

Signaler
-
Messages postés
14871
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 novembre 2020
-
Bonsoirs chers confrères, je viens ce soir vous ennuyer car étant débutant dans ce langage, j'ai encore du mal avec certaines choses, et là, ça fait 3h que mon code bloque:

       public void WriteLine(string chemin, string Content, int Line)
        {
            int LineToWrite;
            int i;
            string ContentToWrite;
            string CurrentContent;
            string[] stringArray = new string[1500];
            string che = Path.GetFullPath(chemin);

            i = 0;
            ContentToWrite = Content;
            LineToWrite = Line;

            System.IO.StreamWriter file = new System.IO.StreamWriter(@che);

            CurrentContent = GiveLine(@che, i + 1);

            // On lis pour mettre les lignes du fichier dans un tableau
            while (CurrentContent != null)
            {
                CurrentContent = GiveLine(@che, i + 1);
                stringArray[i] = CurrentContent;
                i++;       
            }

            i = 0;

            // Ensuite on restitue toutes les lignes dans ce fichier, puis on ferme
            while (stringArray[i] != null)
            {
                file.WriteLine(stringArray[i]);
                i++;
            }

            // A la fin
            file.Close();
        }


Ou est l'erreur svp, je l'appel de la manière suivante :

Main.TraiteText.WriteLine(@"Content\Infos\infos.txt", "no", 2);


En gros le code n'est meme pas terminé, et ça plante deja, quelqu'un peut m'aider ?

J'essaie d'ouvrir un fichier, et d'écrire a une ligne précise, le "string" que je veut lui donner.

Voila !
A voir également:

8 réponses

Messages postés
14871
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 novembre 2020
93
Hello,
Déjà, nettoyons ton code

public void WriteLine(string chemin, string Content, int Line)
{
  string CurrentContent;
  ArrayList stringArray = new ArrayList();
  string che = Path.GetFullPath(chemin);

  // On lit pour mettre les lignes du fichier dans une liste
  int i = 0;
  CurrentContent = GiveLine(@che, i + 1);
  while (CurrentContent != null)
  {
    stringArray.Add(CurrentContent);
    CurrentContent = GiveLine(@che, i + 1);
    i++;       
  }

  // Ensuite on restitue toutes les lignes dans ce fichier, puis on ferme
  System.IO.StreamWriter file = new System.IO.StreamWriter(@che);
  foreach (String str in stringArray)
  {
    file.WriteLine(str);
  }

  // A la fin
  file.Close();
}

On peut remarquer que le paramètre Content n'est pas utilisé...

En gros le code n'est meme pas terminé, et ça plante deja, quelqu'un peut m'aider ?

Quel est le comportement exactement? ça plante? Où? Est-ce que tes fichiers sont bien ouverts?

Voici un exemple d'insertion de lignes avec un StreamWriter

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Bon, après avoir pris ton code et fini le miens par dessus, cela ne marche toujours pas, donc je vais essayer de te faire visualiser mon code, pour que tu y trouve une eventuelle erreur:

tout d'abord, la classe traitetexte :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;

namespace Client_HORION
{
    class TextClass
    {
        // lire
        public string GiveLine(string chemin, int line)
        {
            int counter = 1;
            string CurrentLine;
            string che = Path.GetFullPath(chemin);

            // Read the file and display it line by line.
            System.IO.StreamReader file = new System.IO.StreamReader(@che);
            while ((CurrentLine = file.ReadLine()) != null)
            {
                if (counter == line)
                {
                    file.Close();
                    break;
                }
                counter++;
            }
            return CurrentLine;
        }

        // ecrire
        public void WriteLine(string chemin, string Content, int Line)
        {
            string CurrentContent;
            string ContentToWrite = Content;
            int LineToWrite = Line;
            ArrayList stringArray = new ArrayList();
            string che = Path.GetFullPath(chemin);

            // On lit pour mettre les lignes du fichier dans une liste
            int i = 1;
            CurrentContent = GiveLine(@che, 1);
            while (CurrentContent != null)
            {
                stringArray.Add(CurrentContent);
                CurrentContent = GiveLine(@che, i);
                i++;
            }

            // Ensuite on restitue toutes les lignes dans ce fichier, puis on ferme
            System.IO.StreamWriter file = new System.IO.StreamWriter(@che);

            i = 1;
            foreach (String str in stringArray)
            {
                if (LineToWrite != i)
                {
                    file.WriteLine(str);
                }
                else if (LineToWrite == i)
                {
                    file.WriteLine(ContentToWrite);
                }
                i++;
            }

            // A la fin
            file.Close();
        }

    }
}


Ensuite, dans un autre objet, j'appel ces fonctions, mais a l'execution, le code plante et ne fais pas la ligne suivante qui est InitMap :

                            // pour les infos de connexion
                            Main.TraiteText.WriteLine(@"Content\Infos\infos.txt", "no", 2);
Main.initMAP(int.Parse(this.Datas[1]));
En fait, le code writeLine, n'écris même pas dans le fichier, car j'ai déplacé :
Main.TraiteText.WriteLine(@"Content\Infos\infos.txt", "no", 2);

Pour tester.
Messages postés
14871
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 novembre 2020
93
Les éventuelles erreurs, tu ne pourra les voir qu'avec le debugger, ou bien en traçant tes variables. Il se peut par exemple que:
- che ne soit pas valide
- GiveLine ne te retourne pas le bon résultat
- file ne soit pas valide

Sinon, tu peux remplacer la 1ère étape, qui est la lecture ligne par ligne de ton fichier, par le code que je t'ai filé en lien, à savoir:
string[] lines = File.ReadAllLines(che);


Le code entier est le suivant:
public static void InsertLineInFile(string path, string line, int position)
{
  string[] lines = File.ReadAllLines(path);
  using (StreamWriter writer = new StreamWriter(path))
  {
    for (int i = 0; i < position; i++)
      writer.WriteLine(lines[i]);
    writer.WriteLine(line);
    for (int i = position; i < lines.Length; i++)
      writer.WriteLine(lines[i]);
  }
}


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14871
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 novembre 2020
93
Eh mais attends! Est-ce que le problème ne viendrait pas de l'appel à la méthode? Je ne vois pas de mot clé "static" et pourtant, tu semble l'utiliser de manière statique...
Un peu de lecture sur les classes statiques


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Merci, encore une fois tu m'a grandement aidé, il ne me reste plus qu'a te demander une derniere petite choses pour que tout fonctionne comme je l'entend :) :

Comment supprimer l'intégralité des lignes d'un fichier ?



string[] lines = File.?????(path);


Merci
Oups : EDIT : juste :
File.??????(supprimer tout le contenu)?????(path);
Messages postés
14871
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 novembre 2020
93
System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);



@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...