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");
}
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"); }Или правильно использовать
usingforeach (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