Professional Documents
Culture Documents
File Checkpoint
File Checkpoint
1
private long _last;
private long _lastFlushed;
private readonly bool _cached;
public FileCheckpoint(string filename, string name, bool cached = false, bool mustEx
_filename = filename;
_name = name;
_cached = cached;
var old = File.Exists(filename);
_fileStream = new FileStream(_filename,
mustExist ? FileMode.Open : FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.ReadWrite);
if (_fileStream.Length != 8)
_fileStream.SetLength(8);
_reader = new BinaryReader(_fileStream);
_writer = new BinaryWriter(_fileStream);
if (old)
_last = _lastFlushed = ReadCurrent();
else {
_last = initValue;
Flush();
}
}
_reader.Close();
_writer.Close();
_fileStream.Close();
}
2
public void Write(long checkpoint) {
Interlocked.Exchange(ref _last, checkpoint);
}
_fileStream.Seek(0, SeekOrigin.Begin);
_writer.Write(last);
_fileStream.FlushToDisk();
Interlocked.Exchange(ref _lastFlushed, last);
}