BinaryWriter prefixes written data so BinaryReader can read it. Without those prefixes, you must know exactly what you're doing when writing and reading the file.
You can omit both writers and directly write into the file if that's what you want:
using (var stream = new FileStream(_caminho, FileMode.Append, FileAccess.Write)) { stream.WriteByte('0'); WriteString(stream, "foo", Encoding.UTF8); } private void WriteString(Stream stream, string stringToWrite, Encoding encoding) { var charBuffer = encoding.GetBytes(stringToWrite); stream.Write(charBuffer, 0, charBuffer.Length); } You'll need to explicitly specify the encoding to get the bytes in, as String.ToByteArray returns the string as Unicode characters, which is .NET language for "UTF-16LE".NET language for "UTF-16LE", giving you two bytes per character.