Запись и чтение байтов в / из файлового потока - PullRequest
0 голосов
/ 14 апреля 2019

Я работаю над имитацией файловой системы . Мне трудно читать и записывать байты в / из файлового потока . Я стремлюсь переключить первый бит на «1», указывая, что в нем действительно есть данные. Я настроил тестовый сценарий для представления того, чего я пытаюсь достичь.

Проблема в том, что он, кажется, включает бит и записывает его в _FileStream , однако, когда я иду, чтобы прочитать его - я не вижу своего изменения.

_Filestream = new FileStream(volumeName, FileMode.Open);
 _Filestream.Seek(0, SeekOrigin.Begin);

        //Test lines
        byte[] testAsBytes = new byte[_DirectoryUnitSize];
        testAsBytes[0] = 1;

        byte[] newDirectoryByteArray = new byte[_DirectoryUnitSize];

        _Filestream.Write(testAsBytes, 0, newDirectoryByteArray.Length);
        _Filestream.Flush();


         int bytesRead;
         byte[] buffer = new byte[64];
         char[] charBuffer = new char[64];


         List<byte> data = new List<byte>();
         while ((bytesRead = _Filestream.Read(buffer, 0, buffer.Length)) > 0) {
             if (!string.IsNullOrEmpty(Encoding.ASCII.GetString(buffer, 0, bytesRead))) {
                 data = Encoding.ASCII.GetBytes(charBuffer, 0, 1).ToList();

             }
        }

1 Ответ

0 голосов
/ 14 апреля 2019

У вас есть проблемы с сервалом здесь

1.При создании другого byte[] array - newDirectoryByteArray. Кажется ненужным, вы можете просто написать

   _Filestream.Write(testAsBytes, 0, testAsBytes.Length);

2. Когда вы записываете в файл, курсор перемещается вместе с ним, если вы хотите использовать тот же FileStream для чтения из файла, вы должны искать желаемое местоположение. Значение до _Filestream.Read(...) вы должны позвонить, например. Filestream.Seek(0, SeekOrigin.Begin);

С MSDN

Если операция записи прошла успешно, текущая позиция поток увеличивается на количество записанных байтов. Если исключение происходит, текущая позиция потока не изменяется.

  1. строка data = Encoding.ASCII.GetBytes(charBuffer, 0, 1).ToList(); будет всегда возвращается 0, поскольку данные не записываются в charBuffer. Ваши данные находятся на buffer, что означает 1 в индексе 0 и 0 во всех других индексах

вы можете увидеть это с помощью Console.WriteLine(buffer[0]); будет выводить 1 и Console.WriteLine(data[0]); будет выводить 0

...