2015-10-23 4 views
1

Я пытаюсь создать базовую систему ведения журнала для регистрации каждого вызова класса в файл с именем log.csv. У меня есть строка с именем logPath, которая содержит ..\\..\\log.csv и еще одну строку с именем logData, которая содержит информацию, которую я хочу записать в файл журнала.Создание файла с использованием оператора if

код у меня до сих пор:

if (!File.Exists(logPath)) 
{ 
    File.Create(logPath); 
    StreamWriter writeLog = new StreamWriter(logPath, true); 
    writeLog.WriteLine(logData); 
    writeLog.Close(); 

} 
else if (File.Exists(logPath)) 
{ 
    StreamWriter writeLog = new StreamWriter(logPath, true); 
    writeLog.WriteLine(logData); 
    writeLog.Close(); 
} 

Однако, когда я запускаю код и файл журнала не существует, сбой программы, но по-прежнему создает файл log.csv, однако данные в logData ISN Не записано в файл. Когда я запускаю программу еще раз, потому что файл существует, у него нет проблем писать каждый вызов класса. Когда программа вылетает при создании файла, она выдает IOException, утверждая, что файл используется другим процессом.

+0

что вы имеете в виду 'crashes'? есть ли какое-либо исключение? оберните свой код в блок try-catch и отлаживайте catch, чтобы увидеть исключение. – ieaglle

+0

Похоже на антивирус –

+0

BTW: код не следует принципу чистого кода DRY (не повторяйте). Кроме того, 'if' в' else' всегда должно быть истинным (за исключением того, что кто-то удалил файл между этими двумя проверками). –

ответ

2

Удалить следующую строку (это создает файл и сохраняет его открытым, а следующая строка вы пытаетесь создать его снова и врезается Потому что он был создан, а файл все еще открыт):

File.Create(logPath); 

Вот почему вы получили сообщение о том, что файл используется другим процессом, когда на самом деле это ваш собственный процесс, вызванный File.Create

Intact все, что вам нужно, это заменить весь код следующим (он создает файл, если он не существует)

using(var writeLog = new StreamWriter(logPath, true)) 
{ 
    WriteLog.WriteLine(logData); 
    writeLog.Close(); 
} 
+0

Работали, как шарм, спасибо! –

1

Поскольку вы добавления и StreamWriter уже создает файл, если он не существует, вы можете упростить код, как показано ниже:

using (StreamWriter writeLog = new StreamWriter(logPath, true)) 
{ 
    writeLog.WriteLine(logData); 
    writeLog.Close(); 
} 
+1

Я тестировал код, который отлично работает. Я был бы признателен, если бы downvoter объяснил их причину. –

+0

То, что вы указываете правильно, но не то, что ищет OP. Расширьте свой ответ решением для своей проблемы (а не с downvoter я) – Schuere

+0

Я протестировал это решение, и он исправляет, что файл в процессе исключения в моих тестах. так что это решение. –

Смежные вопросы