Мне нужно создать StreamWriter из объекта FileStream и добавить текст в файл . Предполагается, что объект FileStream, который используется, был создан с помощью FileMode.OpenOrCreate и FileAccess.ReadWrite. У меня есть:C# перейти к концу файла с помощью StreamWriter, созданного из FileStream
using (FileStream fs = GetCurrentFileStream())
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("StringToAppend");
sw.Flush();
}
Однако это просто перезаписывает файл с самого начала. Как перейти в конец файла? Есть ли способ изменить FileMode на Append и FileAccess на запись после создания FileStream?
Редактировать: Как уже упоминалось выше, мне нужно сделать это, используя объект FileStream. Ответы от Open existing file, append a single line предполагают, что я могу создать новый StreamWriter из пути к файлу, которого у меня нет.
Редактировать 2: Добавлена усеченная версия GetCurrentFileStream().
public static FileStream GetCurrentFileStream()
{
String fileName = getFileName();
FileStream fs = OpenFileWhenAvailable(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
}
public static FileStream OpenFileWhenAvailable(String fileName, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)
{
int tries = 0;
int timeout = 10 * 1000;
while (true)
{
tries++;
try
{
return new FileStream(fileName, fileMode, fileAccess, fileShare);
}
catch (IOException ex)
{
if (tries * 100 > timeout)
{
return null;
}
else
{
System.Threading.Thread.Sleep(100);
}
}
}
}
GetCurrentFileStream используется в нескольких различных контекстах, поэтому изменение FileMode и FileAccess непосредственно не вариант. Я не хочу делать отдельную версию GetCurrentFileStream только для этого одного случая, поэтому я спрашиваю, есть ли способ перейти к концу потока и добавить строку, когда объект FileStream уже создан.
Не то же самое. Мне нужно сделать это из существующего объекта FileStream. – EJS
Попробуйте 'fs.Seek (0, SeekOrigin.End)' перед 'sw.WriteLine'. –
В дополнение к тому, что сказал @MarkShevchenko, 'Seek' * before * вы создаете' StreamWriter'. Поиск базового потока - это недокументированное поведение, и оно может сломаться в будущем, независимо от того, что он работает на данный момент. –