2012-07-02 4 views
2

J'ai regardé sur beaucoup de sites Web maintenant pour la réponse, mais toutes les réponses fonctionnent seulement pour le richTextbox, et j'utilise le textbox normal. J'essaie d'enregistrer le contenu de la zone de texte dans un fichier de choix, mais pour une raison quelconque, le fichier n'est pas enregistré, et je n'ai aucune idée de l'origine du problème. Voici le code de l'élément de menu 'Enregistrer':Le fichier texte n'est pas sauvegardé mais aucune erreur (C#)

private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
    { 

     SaveFileDialog ofd = new SaveFileDialog(); 
     ofd.Title = "Save"; 
     ofd.Filter = "Txt Documents (.txt)|*.txt|All files (*.*)|*.*"; 
     if (ofd.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       //I don't know what to make of this, because clearly this doesn't work 
       File.WriteAllText(@"./TestFile.txt", MainTextbox.Text); 
      } 
      catch (Exception ex) 
      { 
       MainTextbox.Text += ex; 
      } 
     } 
    } 

Il n'y a pas d'erreur.

+7

Vous ne devriez pas enregistrer dans le fichier sélectionné dans votre 'SaveFileDialog'? –

+0

@TimS. Certainement vaincre le but, la façon dont il est actuellement mis en place. J'appelle votre suggestion une réponse. – erodewald

+3

Etes-vous sûr qu'il n'y a pas d'exception? Peut-être qu'il est avalé quelque part dans la chaîne? Vous essayez de créer un fichier à la racine de votre lecteur C: \, il est donc très possible (et probablement, sauf si vous avez pris d'autres mesures) que vous n'ayez pas la permission de créer un fichier là-bas. Mon hypothèse est que vous utilisez le nom de fichier codé en dur pour tester si vous pouvez créer un fichier, sinon, le commentaire de Tim S ci-dessus peut être la solution. –

Répondre

5

Vous devez enregistrer le fichier sélectionné dans votre SaveFileDialog, tel que récupéré par OpenFile(). Cet exemple a fonctionné pour moi:

SaveFileDialog ofd = new SaveFileDialog(); 
ofd.Title = "Save"; 
ofd.Filter = "Txt Documents (.txt)|*.txt|All files (*.*)|*.*"; 
if (ofd.ShowDialog() == DialogResult.OK) 
{ 
    using (var fileStream = ofd.OpenFile()) 
    using (var sw = new StreamWriter(fileStream)) 
     sw.WriteLine("Some text"); 
} 

Dans votre code, vous permet à l'utilisateur de sélectionner un fichier à enregistrer, puis ignorer et l'écrire dans un emplacement hardcoded. Il est possible que votre application n'ait pas les autorisations pour le faire, mais elle doit avoir les autorisations pour écrire dans un emplacement sélectionné par l'utilisateur.

+0

Cela a résolu mon problème. Merci beaucoup! – DutchLearner

0

Je pense que son accès refusé .. question essayer avec 'D' ...

Ceci est par exemple .. travaille. WriteAllText fonctionne lorsque le fichier existe déjà et si le fichier existe déjà alors AppendAllText

using System; 
using System.IO; 
using System.Text; 

class Test 
{ 
    public static void Main() 
    { 
     string path = @"c:\temp\MyTest.txt"; 

     // This text is added only once to the file. 
     if (!File.Exists(path)) 
     { 
      // Create a file to write to. 
      string createText = "Hello and Welcome" + Environment.NewLine; 
      File.WriteAllText(path, createText); 
     } 

     // This text is always added, making the file longer over time 
     // if it is not deleted. 
     string appendText = "This is extra text" + Environment.NewLine; 
     File.AppendAllText(path, appendText); 

     // Open the file to read from. 
     string readText = File.ReadAllText(path); 
     Console.WriteLine(readText); 
    } 
} 
0

Tout d'abord, l'enregistrement du fichier n'a rien à voir avec l'endroit où le texte vient, riche zone de texte ou zone de texte normal. Comme Brian S. a dit dans un commentaire, il y a probablement une exception parce que vous écrivez dans le lecteur C. Vous devez utiliser un chemin relatif: "./MyTest.txt"

Questions connexes