#c#
#c#
Вопрос:
Я просто хочу иметь возможность записывать путь к определенным файлам в текстовый файл. У меня есть следующее для ведения журнала.
static void LogFile(string lockedFilePath)
{
Assembly ass = Assembly.GetExecutingAssembly();
string workingFolder = System.IO.Path.GetDirectoryName(ass.Location);
string LogFile = System.IO.Path.Combine(workingFolder, "logFiles.txt");
if (!System.IO.File.Exists(LogFile))
{
using (System.IO.FileStream fs = System.IO.File.Create(LogFile))
{
using (System.IO.StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(lockedFilePath);
}
}
}
else
{
using (System.IO.FileStream fs = System.IO.File.OpenWrite(LogFile))
{
using (System.IO.StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(lockedFilePath);
}
}
}
}
но если я вызову это в консольном приложении, подобном этому
foreach (string f in System.IO.Directory.GetFiles(@"C:AASource"))
{
Console.WriteLine("Logging : " f);
LogFile(f);
}
Console.ReadLine();
Единственный файл, который указан в результирующем текстовом файле, является последним файлом в каталоге.
Что я делаю не так?
Ответ №1:
Вместо System.IO.File.OpenWrite(LogFile)
используйте System.IO.File.AppendText(LogFile)
. При использовании OpenWrite
вы будете перезаписывать содержимое тем, на чем вы пишете.
Кроме того, ваша if
инструкция ( if (!System.IO.File.Exists(LogFile))
) не требуется. AppendText
(и OpenWrite
), если уж на то пошло, создаст файл, если он не существует. Это означает, что вам может просто сойти с рук выполнение кода в else
предложении.
Ответ №2:
Вам нужно открыть файл в режиме добавления. В противном случае вы удаляете все, что было в файле до этого.
Вот код файла журнала, который я использую, если вы хотите увидеть другие примеры.
Ответ №3:
Файл.AppendText MSDN
Ответ №4:
Вы перезаписываете файл каждый раз, когда вызываете метод LogFile. Вы можете использовать перегрузку для StreamWriter, которая позволяет добавлять в конец файла:
void LogFile(string lockedFilePath)
{
Assembly ass = Assembly.GetExecutingAssembly();
string workingFolder = System.IO.Path.GetDirectoryName(ass.Location);
string LogFile = System.IO.Path.Combine(workingFolder, "logFiles.txt");
using (System.IO.StreamWriter sw = new StreamWriter(LogFile, true))
{
sw.WriteLine(lockedFilePath);
}
}
Ответ №5:
static void LogFile(string lockedFilePath)
{
Assembly ass = Assembly.GetExecutingAssembly();
string workingFolder = System.IO.Path.GetDirectoryName(ass.Location);
string LogFile = System.IO.Path.Combine(workingFolder, "logFiles.txt");
System.IO.File.AppendAllText(LogFile, System.Environment.NewLine lockedFilePath);
}
Ответ №6:
Вы должны очистить и закрыть StreamWriter. Если записан только последний файл, это означает, что вы просто перезаписываете то, что у вас было.
Увидимся.
Комментарии:
1. Это не требуется, в конце
using
он должным образом очищается и закрывается.