void WriteHeader(bool notify)
        {
            using (LockWrite())
            {
                m_Fs.Seek(0, SeekOrigin.Begin);
                m_Header.ToBinary(m_Bw);

                if (notify && !m_DelayedSync)
                {
                    Sync();
                }
            }
        }
        void Create(int stringCount, int averageStringLength = DefaultAverageStringSize)
        {
            var header = new PropertyStringTableHeader();

            header.version     = Version;
            header.count       = 0;
            header.symbolSlots = Math.Max(stringCount * HashFactor, 1);

            var bytesPerString = GetStringByteSize(averageStringLength);

            header.allocatedStringBytes = stringCount * bytesPerString;
            header.usedStringBytes      = StringLengthByteSize;

            var buffer = new byte[GetSymbolsByteSize(header.symbolSlots) + header.allocatedStringBytes];

            using (var bw = new BinaryWriter(File.Open(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete)))
            {
                header.ToBinary(bw);
                bw.Write(buffer);
            }
        }