コード例 #1
0
        public void WriteTest_DataCountIsNotMultipleOfBufferCapacity_Fail()
        {
            ClearFile();

            string[] data = new string[] { "string1", "string2", "string3", "string4", "string5", "string6" };
            BufferedFileWriter <string> testSubject = new BufferedFileWriter <string>(new Buffer <string>(4), testPath);

            foreach (var str in data)
            {
                testSubject.Write(str);
            }

            StreamReader  reader = new StreamReader(new FileStream(testPath, FileMode.Open));
            List <string> readen = new List <string>();

            while (!reader.EndOfStream)
            {
                readen.Add(reader.ReadLine());
            }
            reader.Close();

            bool isOk = readen.Count == data.Length;

            if (isOk)
            {
                foreach (var str in readen)
                {
                    isOk &= data.Contains(str);
                    Debug.WriteLine(str);
                }
            }

            Assert.IsFalse(isOk);
        }
コード例 #2
0
        /// <summary>
        /// Единый метод для инициализации страницы.
        /// </summary>
        /// <param name="isCompleted">Является ли страница завершенной?</param>
        private void Initialize(bool isCompleted)
        {
            var fileInfo = new FileInfo(_fileName);

            if (!Directory.Exists(_fileName))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(_fileName));
            }

            var fileStream = new FileStream(
                _fileName,
                FileMode.OpenOrCreate,
                FileAccess.ReadWrite,
                FileShare.ReadWrite,
                _config.BufferSize,
                FileOptions.SequentialScan
                );

            // Если файл не найден, или файл есть, но он не завершенный
            if (!fileInfo.Exists || !isCompleted)
            {
                // если длина оказалась больше 0, значит файл уже существует и инициализирован.
                if (fileStream.Length > 0)
                {
                    ReadDataPageMetadata(fileStream);
                }
                else
                {
                    // файл новый, поэтому заполняем нулями.
                    fileStream.SetLength(_config.PageSize);

                    _header = new DataPageHeader
                    {
                        // для нового файла нижняя граница - после заголовка
                        LowerOffset = DataPageHeader.Size,
                        // а верхняя - конец файла.
                        UpperOffset = (int)fileStream.Length
                    };
                }

                _bufferedFileWriter = new BufferedFileWriter(
                    fileStream,
                    _config.BufferSize,
                    _config.AutoFlushInterval
                    );

                // записать заголовок в файл.
                UpdateHeader();
            }
            else
            {
                // если файл существует и завершен, то читаем только метаданные.
                ReadDataPageMetadata(fileStream);
            }

            // Выключаем индексацию файла операционной системой, так как в файле массив байт, искать по контенту не получится :)
            fileInfo.Attributes = FileAttributes.NotContentIndexed;
        }
コード例 #3
0
 protected BaseGuild(uint id) // serialization ctor
 {
     Serial = id;
     List.Add(Serial, this);
     if (Serial + 1 > m_NextID)
     {
         m_NextID = Serial + 1;
     }
     SaveBuffer = new BufferedFileWriter(true);
 }
コード例 #4
0
ファイル: Guild.cs プロジェクト: theinfamousrj/ModernUO
 protected BaseGuild()
 {
     Serial = m_NextID++;
     List.Add(Serial, this);
     SaveBuffer = new BufferedFileWriter(true);
 }
コード例 #5
0
 /// <summary>
 /// Инициализировать буферизированный писатель в файл.
 /// </summary>
 private void InitializeBufferedFileWriter()
 {
     _bufferedFileWriter = new BufferedFileWriter(GetFileStream(_fileName), _config.BufferSize, _config.AutoFlushInterval);
 }