C# StreamWriter не записывает в файл



BasicLog - это список имен и временных меток. Я хочу записать их в файл. Две ошибки, которые я получаю, находятся в строке"; "в строке StreamWriter и в файле".- на второй линии.



Ошибка';': возможно ошибочное пустое утверждение
Ошибка в файле: имя "file" не существует в текущем контексте.



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



foreach (BasicLog basicLog in emailAttach)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\sorted.txt", true));
file.WriteLine(basicLog.LastName + " - " + basicLog.InOrOut + " - " + basicLog.EventTime + "n");
}
960   4  

4 ответов:

Упс есть точка с запятой в конце строки using???

Возможно, вашим намерением было:

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\sorted.txt", true))
{
    foreach (BasicLog basicLog in emailAttach) 
    {          
        file.WriteLine(basicLog.LastName + " - " + basicLog.InOrOut + " - " + basicLog.EventTime + "\n"); 
    } 
}

Любопытно, то же самое произошло со мной сегодня утром : -)

Да, у вас есть ошибочное пустое утверждение.

Удалите"; " и отступ, чтобы показать, почему:

foreach (BasicLog basicLog in emailAttach)
{
   using (System.IO.StreamWriter file = 
            new System.IO.StreamWriter(@"C:\\sorted.txt", true))  //;
   {
      file.WriteLine(basicLog.LastName + " - " + basicLog.InOrOut + " - "
             + basicLog.EventTime + "\n");
   }
}

Оператор WriteLine () находится (должен находиться) под контролем using (). {} делают это более ясным.

Это будет работать, но обратите внимание, что это очень неэффективно, вы повторно открываете файл (для добавления) несколько раз.

Поэтому лучше инвертировать foreach / используя:

using (System.IO.StreamWriter file = 
      new System.IO.StreamWriter(@"C:\\sorted.txt", true)) 
{
   foreach (BasicLog basicLog in emailAttach)
   {
        file.WriteLine(basicLog.LastName + " - " + basicLog.InOrOut + " - " 
            + basicLog.EventTime + "\n");
   }
}

Вы избавляетесь от StreamWriter Перед записью в файл. Рефактор к этому:

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\sorted.txt", true))   
{
   foreach (BasicLog basicLog in emailAttach)
   {     
      file.WriteLine(basicLog.LastName + " - " + basicLog.InOrOut + " - " + basicLog.EventTime + "\n");
   }
}

Ваш экземпляр file будет удален сразу после этой строки (так как вы используете using):

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\sorted.txt", true));

Измените его на

System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\sorted.txt", true);

Или полный код,

System.IO.StreamWriter file;
foreach (BasicLog basicLog in emailAttach)
{
    file = new System.IO.StreamWriter(@"C:\\sorted.txt", true);
    file.WriteLine(basicLog.LastName + " - " + basicLog.InOrOut + " - " + basicLog.EventTime + "\n");
}

Или правильно использовать using

foreach (BasicLog basicLog in emailAttach)
{
    using(System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\\sorted.txt", true))
    {
        file.WriteLine(basicLog.LastName + " - " + basicLog.InOrOut + " - " + basicLog.EventTime + "\n");
    }
}

Comments

    Ничего не найдено.