2017-09-12 1 views
-1

Je suis en train d'apprendre le C# et de frapper un mur qui montre qu'il me manque manifestement quelque chose d'important. La ligne:Enregistrement d'informations dans un fichier texte en C#

var objWriter = new System.IO.StreamWriter(fileName, False); 

Dans le code ci-dessous provoque une erreur - la chaîne fileName variable ne peut pas être converti en System.IO.Stream et False n'existe pas dans le contexte actuel. Pourquoi?

string message = "Hi There!"; 
string myDocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
string fileName = myDocs + "'\'Test.txt"; 

if (!System.IO.File.Exists(fileName)) 
{ 
    System.IO.File.Create(fileName).Dispose(); 
} 
var objWriter = new System.IO.StreamWriter(fileName, False); 
objWriter.Write(message); 
Console.WriteLine("Message Saved"); 
objWriter.Close(); 
+7

C# est sensible à la casse, c'est donc 'false', pas' False' – Kolichikov

+1

Arghhhhhhh. C'est faux et non faux – Rich

+4

Je conseille d'utiliser le modèle 'using', donc vous ne pouvez pas oublier de' .Close() 'votre' StreamWriter' https://stackoverflow.com/questions/513672/disposable-using-pattern – martijnn2008

Répondre

3

Fix: Remplacer False avec false. Explication: Here est une liste de constructeurs que StreamWriter a. Notez qu'il prend un Stream et un Encoding, ou un String et Boolean. Comme C# est sensible à la casse, il essaie de chercher un objet appelé False quelque part dans votre code, ce qui explique votre premier problème (False n'existe pas dans le contexte actuel). Mais False est un objet, pas un booléen, donc le compilateur suppose que fileName est de type Stream (pour s'adapter à la signature), mais hélas, il ne sait pas comment convertir votre chaîne en Stream, d'où la seconde erreur.

1

Youre \ isnt travailler dans votre code donné et remplacer F ALSE avec f ALSE

Remplacer cette

string fileName = myDocs + "'\'Test.txt"; 

avec ce

string fileName = myDocs + @"\Test.txt"; 
+0

Bien repéré! Je suppose que cela aurait été ma prochaine question. Donc, voté Extrêmement reconnaissant – Rich

0

Le code I suggérerait

var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Test.txt"); 

using (var fs = new StreamWriter(path)) 
{ 
    fs.Write("Hi there!"); 
} 

Console.WriteLine("Message Saved"); 

Première chose, veuillez utiliser la méthode statique Path.Combine pour créer le chemin complet. Traiter avec \ ou \\ fonctionnera également, mais il est beaucoup plus joli d'utiliser la méthode déjà créée.

La deuxième chose est qu'il est toujours bon de créer un objet IDisposable dans le bloc using. Dans votre cas using fermera votre flux à la fin de l'utilisation de la portée de bloc.

Une autre remarque est qu'il est toujours préférable de déclarer une variable dans un endroit où vous voulez l'utiliser. Dans ce cas, la chaîne "Hi there!" est créée directement dans un lieu d'utilisation. C'est l'une des bonnes pratiques auxquelles nous devrions obéir. S'il vous plaît regardez le lien that.

+0

Je pense que vous devriez expliquer pourquoi vous suggérez l'extrait de code que vous avez suggéré pour obtenir votre réponse votée. – martijnn2008

+0

@ martijnn2008 Désolé, je ne suis pas sûr de ce que vous voulez dire. J'ai voté pour le Floarian3007, car il a judicieusement repéré que j'ai fait un gâchis de ma concaténation. J'aime vraiment la suggestion de rraszewski aussi car elle a ouvert des recherches intéressantes pour moi – Rich

+0

Je suppose que vous auriez besoin d'utiliser.System.IO; pour que cette solution fonctionne – Rich