我需要从一个FileStream对象创建一个StreamWriter,并向文件中追加一些文本。假设正在使用的FileStream对象已经使用FileMode.OpenOrCreate和FileAccess.ReadWrite创建。我的代码如下:
using (FileStream fs = GetCurrentFileStream())
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("StringToAppend");
sw.Flush();
}
然而,这只是从文件开头覆盖文件。我如何移动到文件末尾?也许有一种方法可以在创建FileStream之后将FileMode更改为Append并将FileAccess更改为Write?编辑:如上所述,我需要使用FileStream对象来完成此操作。打开现有文件,追加单行的答案假定我可以从文件路径创建新的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对象已经被创建时跳到流的末尾并追加一个字符串。
sw.WriteLine
之前尝试使用fs.Seek(0, SeekOrigin.End)
。 - Mark ShevchenkoStreamWriter
之前,应该先进行Seek
操作。寻找基础流是未记录的行为,它可能会在将来出现问题,无论它目前是否正常工作。 - Jonathan Dickinson