Есть тестовый класс, который создает файлы журналов, в которые я пишу. Я хочу иметь возможность добавлять текст в файл во всей моей программе, ссылаясь на метод класса LogErrors.
public class test
{
public static string errorFileName = DateTime.Now.ToString("yyyy-MM-dd") + "testerrors.csv";
public static StreamWriter errorfile = new StreamWriter("c:\" + @"\" + errorFileName, true);
public static void LogErrors(string error, string record)
{
test.errorfilewriter.WriteLine( error + "," + record );
}
}
Здесь я ссылаюсь на класс для добавления записей в файл: если в моей программе возникает ошибка, я хочу сослаться на метод, а затем добавить эту строку текста в файл.
test.LogErrors("INVALID RECORD", string.Join(",",line));
В этой строке я получаю эту ошибку:
The type initializer for program.Test threw an excpetion.
INNER EXCEPTION: The process cannot access the file c:\2013-10-21testerrors.csv because it is being used by another process.
Файл был только что создан во время этой программы, поэтому он еще не существует и не открыт где-то еще.
РЕДАКТИРОВАТЬ:
public class test
{
public static string errorFileName = DateTime.Now.ToString("yyyy-MM-dd") + "testERRORS.csv";
private static object _lockObj = new Object();
public static void LogErrors(string error, string record)
{
lock (_lockObj)
{
File.AppendAllText(Logging.errorFileName, error + "-" + record);
//File.AppendAllLines does not exist in .NET 3.5
}
}
test.LogErrors("INVALID",line));
Я прохожу строку test.LogError, и она переходит в тестовый класс, но если я остановлю программу после того, как она напишет эту строку, чтобы проверить файл. В файле ничего нет. Также я могу использовать объект блокировки для более чем одного файла. Поскольку я создаю кучу файлов журнала в этом тестовом классе. Откуда программа знает, куда поместить такие файлы, как c:/, как об этом заявлял стримрайтер.