向文件流写入字节或从文件流读取字节

时间:2019-04-14 05:36:07

标签: c# filestream

我正在模拟文件系统。我很难在文件流中读写字节。我的目标是将第一位切换为“ 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 :(得分:0)

您在这里遇到服务问题

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的1,并污染所有其他索引的0。

您可以用Console.WriteLine(buffer[0]);看到它,将输出 1 ,而Console.WriteLine(data[0]);将输出 0