public RecordHolder(ClusteredFile file, UInt32 RecordNo, Record record) { RecordFinalized = new System.Threading.EventWaitHandle(false, System.Threading.EventResetMode.ManualReset); #if DUMP_FINALIZE System.Diagnostics.Trace.WriteLine(file.mOriginalFile + " New RecordHolder for #" + RecordNo); System.Diagnostics.Debug.Assert(record != null); #endif mFile = file; mRecordNo = RecordNo; MakeWeakRef(record); mHold = record; }
internal static DbfFile <TRecord> Get(string filePath, System.Text.Encoding encoding, DbfVersion version) { var file = ClusteredFile.Get <DbfFile <TRecord> >(filePath, OpenFileMode.OpenOrCreate, 4096); if (file.ReaderCount == 1) { file.mEncoding = encoding; file.mVersion = version; file.Initialize(); } else { // perhaps check encoding and version match } return(file); }
static public T Get <T>(string filepath, OpenFileMode mode, int bufferSize) where T : ClusteredFile, new() { var fi = new System.IO.FileInfo(filepath); // in case the file is readonly we assume users expect us to force the OpenReadOnly mode. if (fi.Exists && (fi.Attributes & FileAttributes.ReadOnly) != 0) { mode = OpenFileMode.OpenReadOnly; } ClusteredFile clusteredFile = null; if (!mOpenFiles.TryGetValue(fi.FullName, out clusteredFile)) { clusteredFile = new T(); mOpenFiles.Add(fi.FullName, clusteredFile); } FileMode fm; FileAccess fa; FileShare fs; switch (mode) { case OpenFileMode.OpenOrCreate: fm = FileMode.OpenOrCreate; fa = FileAccess.ReadWrite; fs = FileShare.Read; break; case OpenFileMode.OpenReadOnly: fm = FileMode.Open; fa = FileAccess.Read; fs = FileShare.ReadWrite; break; default: // OpenFileMode.OpenReadWrite: fm = FileMode.Open; fa = FileAccess.ReadWrite; fs = FileShare.Read; break; } clusteredFile.InternalAddReader(fi, fm, fa, fs, bufferSize); return((T)clusteredFile); }