2013-03-21 2 views
1

Моя цель с помощью этого кода - использовать цикл foreach для прохождения каждого объекта и записать текущее строковое значение в файл txt.Запись в файл с использованием значений из объекта в C#

Я использую «Woof» и «Bull» в качестве теста. Bull - это строковая переменная в моем классе AverageValues.

К сожалению, в настоящее время он не будет записывать значение быка в файл, однако он создаст файл.

Я думаю, что это легко исправить, я просто не могу найти его прямо сейчас.

Вся помощь будет оценена!

public void doStuff() 
    { 
     AverageValues AVS = new AverageValues(); 
     AVS.Bull = "Woof"; 
     string path = "C:\\users\\kjenks11\\Averages.txt"; 
     FileStream NewFile = File.Create(path); 
     StreamWriter writeIt = new StreamWriter(NewFile); 
     List<AverageValues> AV = new List<AverageValues>(); 
     AV.Add(AVS); 

     foreach (var value in AV) 
     { 
       writeIt.Write(value.Bull); 
     } 
     NewFile.Close(); 
    } 

ответ

3

Вам нужно смывать, чтобы записать данные в файл. Вы также можете подумать о том, чтобы добавить к своему писателю заявления, чтобы освободить ресурсы, когда вы закончите.

public void doStuff() 
{ 
    AverageValues AVS = new AverageValues(); 
    AVS.Bull = "Woof"; 
    string path = "C:\\users\\kjenks11\\Averages.txt"; 
    using (var NewFile = File.Create(path)) 
    { 
    using (var writeIt = new StreamWriter(NewFile)) 
    { 
     List<AverageValues> AV = new List<AverageValues> {AVS}; 
     foreach (var value in AV) 
     { 
     writeIt.Write(value.Bull); 
     } 
    } 
    } 
} 
+0

Thanks Man. Это сработало. Ты восхитителен. – user1414048

+0

Не проблема, ум, отмечающий одного из нас, как принятый ответ? :) – EJC

3

Flush или закрыть поток перед закрытием самого файла:

foreach (var value in AV) 
{ 
    writeIt.WriteLine(value.Bull); 
} 
writeIt.Flush(); 
writeIt.Close(); 

Примечание по стилю - при создании Stream (любого рода), или, скорее, любой объект, который реализует IDisposable, создать его с using statement:

using(var writeIt = new StreamWriter(NewFile)) 
{ 
    // use writeIt here - it will dispose properly 
} 
2

Если вы используете using вокруг потока, нет необходимости вызывать вровень и закрыть явно. Как только вы покинете область «using», поток будет закрыт и удален. Закрытие вызовет флеш для вас.

public void doStuff() 
    { 
     AverageValues AVS = new AverageValues(); 
     AVS.Bull = "Woof"; 
     string path = "C:\\users\\kjenks11\\Averages.txt"; 
     FileStream NewFile = File.Create(path); 
     List<AverageValues> AV = new List<AverageValues>(); 
     AV.Add(AVS); 

     using(StreamWriter writeIt = new StreamWriter(NewFile)) 
     { 
      foreach (var value in AV) 
      { 
       writeIt.Write(value.Bull); 
      } 
     } 
     NewFile.Close(); 
    } 
+2

Вы можете использовать 'using' в FileStream, как @EJC post, но при минимальном я бы переместил' NewFile.Close() 'ниже блока' using'. –