我正在模拟文件系统。我很难在文件流中读写字节。我的目标是将第一位切换为“ 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();
}
}
答案 0 :(得分:0)
您在这里遇到服务问题
1。为什么要创建另一个byte[] array
-newDirectoryByteArray。似乎没有必要,您只需编写
_Filestream.Write(testAsBytes, 0, testAsBytes.Length);
2。在写入文件时,光标会随之移动,如果要使用相同的FileStream来读取文件,则必须寻找所需的位置。例如,必须在_Filestream.Read(...)
之前打电话。 Filestream.Seek(0, SeekOrigin.Begin);
来自MSDN
如果写操作成功,则当前位置 流按写入的字节数超前。如果有例外 发生时,流的当前位置不变。
data = Encoding.ASCII.GetBytes(charBuffer, 0, 1).ToList();
行将始终恢复为0,因为没有数据写入charBuffer
。您的数据位于buffer
处,它将污染索引1的1,并污染所有其他索引的0。您可以用Console.WriteLine(buffer[0]);
看到它,将输出 1 ,而Console.WriteLine(data[0]);
将输出 0