Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }