Вообще, имхо, достаточно странная у вас идея, придумывать какой-то свой формат для данных.
Почему не json, не protobuf, не msgpack, ни хоть тот же BinarySerializer?
1.
Мой код считывает файл и записывает его, но на выводе я вижу неправильные символы
Значит либо читает, либо пишет неправильно.
2.
f.Read(strBytes, 0, strBytes.Length); //Зачем тут эта строка, если дальше в цикле идёт чтение?
//Длина стрима считается в байтах, а char имеет размер 2, а не 1
for (int i = 0; i < f.Length; i++)
{
// А кто будет проверять, сколько по факту прочитано байтов и дочитывать непрочитанное?
f.Read(strBytes, 0, strBytes.Length);
// А кем гарантирована кодировка?
//Иногда Encoding.Default может кинуть NotSupportedException, так что лучше использовать конкретную кодировку
string str = Encoding.Default.GetString(strBytes);
if (str != " ") // А кто гарантирует, что в середине вашей строки не будет пробелов?
{
product.Name += str; //Лучше использовать StringBuilder
}
else
break;
}
3. Как-то странно происходит чтение цены (смотри имена переменных)
byte[] priceBytes = new byte[sizeof(int)];
f.Read(strBytes, 0, strBytes.Length);
product.Price = BitConverter.ToInt32(priceBytes, 0);