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); }
/// <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; }
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); }
protected BaseGuild() { Serial = m_NextID++; List.Add(Serial, this); SaveBuffer = new BufferedFileWriter(true); }
/// <summary> /// Инициализировать буферизированный писатель в файл. /// </summary> private void InitializeBufferedFileWriter() { _bufferedFileWriter = new BufferedFileWriter(GetFileStream(_fileName), _config.BufferSize, _config.AutoFlushInterval); }