C# でファイルを開いたままにし、オーバーヘッドをあまりかけずに定期的にその内容を上書きできる正しい方向に誰かが私を向けることができますか?
これが Silverlight 4 での方法です。Silverlight を使用していないため、分離ストレージは使用しませんが、バッキング ストアに関係なく同じ手法が機能します。
興味深い点は、Write() メソッドにあります。
logWriter.BaseStream.SetLength(0);
Stream.SetLength
メソッドから:
派生クラスでオーバーライドされると、現在のストリームの長さを設定します。
AutoFlush (この例で行ったように) を使用するか、. のlogWriter.Flush()
後にを追加して、ストリームをフラッシュしてくださいlogWriter.Write()
。
/// <summary>
/// Represents a log file in isolated storage.
/// </summary>
public static class Log
{
private const string FileName = "TestLog.xml";
private static IsolatedStorageFile isoStore;
private static IsolatedStorageFileStream logWriterFileStream;
private static StreamWriter logWriter;
public static XDocument Xml { get; private set; }
static Log()
{
isoStore = IsolatedStorageFile.GetUserStoreForApplication();
logWriterFileStream = isoStore.OpenFile(
FileName,
FileMode.Create,
FileAccess.Write,
FileShare.None);
logWriter = new StreamWriter(logWriterFileStream);
logWriter.AutoFlush = true;
Xml = new XDocument(new XElement("Tests"));
}
/// <summary>
/// Writes a snapshot of the test log XML to isolated storage.
/// </summary>
public static void Write(XElement testContextElement)
{
Xml.Root.Add(testContextElement);
logWriter.BaseStream.SetLength(0);
logWriter.Write(Xml.ToString());
}
}