2010-12-06 5 views
0

Eh bien, maintenant j'ai un nouveau problème. Je suis en train d'écrire le code en C#C# Enregistrement de "X" fois dans un fichier .txt sans écraser la dernière chaîne

Je veux enregistrer de textBoxName dans le fichier group.txt chaque fois que j'entre la chaîne dans la zone de texte et cliquez sur le bouton Enregistrer. Il devrait enregistrer cet ordre (s'il est possible de trier comme AZ ce serait génial):

1. Petar Milutinovic
2. Ljiljana Milutinovic
3. Stefan Milutinovic
4. ... etc

Je ne peux pas obtenir de travailler, j'ai essayé d'utiliser tehniques de ma première question, et pas de solution encore :(

C'est facile, je suppose, mais im encore beginer et j'ai besoin ce baddly ...

+0

est ce devoir? – Brad

+0

Non ce n'est pas. Je fais une petite application administrative pour ma mère :) Et à travers ça, j'essaie d'apprendre quelque chose de nouveau – Estomaniko

Répondre

1

Essayez d'aborder ce à partir d'une approche descendante. Écrivez ce qui devrait arriver, parce qu'il est pas évident de votre question

Exemple:

  1. L'utilisateur saisit une valeur dans une zone de texte
  2. utilisateur clique Enregistrer
  3. Une nouvelle ligne est ajoutée à la fin d'un fichier, le contenu de la zone de texte en (une seule ligne?) étape 1

Remarque: chaque ligne est précédée d'un numéro de ligne, sous la forme "X. Sample » où X est le numéro de la ligne et l'échantillon est le texte de la zone de texte

est-ce qui précède précise

(Si vous voulez juste ajouter une ligne dans un fichier texte, voir http:. // msdn.microsoft.com/en-us/library/ms143356.aspx-File.AppendAllText(filename, myTextBox.Text + Environment.NewLine); peut-être ce que vous voulez)

+0

Oui, ce que je voulais dire ... L'utilisateur clique puis ajoute une nouvelle ligne dans le fichier. Chaque fois que l'utilisateur clique sur l'enregistrer, ajoutez la nouvelle ligne dans le fichier .txt – Estomaniko

+0

Vous pouvez essayer la méthode 'File.AppendAllText', comme indiqué dans le lien et l'exemple dans ma réponse. –

0

Si vous avez besoin du fichier à trier chaque fois qu'une nouvelle ligne est ajoutée, vous devez soit charger le fichier dans une liste, ajouter la ligne, et le trier, ou utiliser une sorte de recherche (je recommande une recherche binaire) pour déterminer où la nouvelle ligne appartient et l'insérer en conséquence.La seconde approche n'a pas beaucoup avantages, t Cependant, comme vous devez réécrire le fichier entier pour insérer une ligne, cela ne vous fait gagner du temps que dans le meilleur des cas, ce qui se produit lorsque la ligne à insérer tombe à la fin du fichier. De plus, la deuxième méthode est un peu plus légère sur le processeur, car vous n'essayez pas de trier chaque ligne - pour les petits fichiers cependant, la différence sera imperceptible.

1

Voici une petite routine simple que vous pouvez utiliser pour lire, trier et écrire le fichier. Il y a des tas de façons que cela peut être fait, le mien n'est probablement pas le meilleur. Même maintenant je pense "J'aurais pu écrire cela en utilisant un FileStream et fait l'itération pour compter alors", mais ce sont des micro-optimisations qui peuvent être faites plus tard si vous avez des problèmes de performances avec des fichiers de plusieurs mégaoctets.

public static void AddUserToGroup(string userName) 
    { 
     // Read the users from the file 
     List<string> users = File.ReadAllLines("group.txt").ToList(); 
     // Strip out the index number 
     users = users.Select(u => u.Substring(u.IndexOf(". ") + 2)).ToList(); 
     users.Add(userName); // Add the new user 
     users.Sort((x,y) => x.CompareTo(y)); // Sort 
     // Reallocate the number 
     for (int i = 0; i < users.Count; i++) 
     { 
      users[i] = (i + 1).ToString() + ". " + users[i]; 
     } 
     // Write to the file again 
     File.WriteAllLines("group.txt", users); 
    } 
Questions connexes