Десериализация потока двоичного файла в строку - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь написать приложение, которое сохраняет информацию в двоичном файле и может открыть этот файл и прочитать упомянутую информацию.Однако проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я открываю файл .bin, массивы и последующие текстовые поля заполняются "System.String []". Я не знаю, в чем проблема, но методы сохранения и открытия файланиже.Если кто-то может помочь, это будет высоко ценится.

Метод экономии

private void BtngameSave_Click(object sender, EventArgs e)
{
    string FileName = "gamedata.dat";
    SaveFileDialog SaveBinary = new SaveFileDialog();
    DialogResult sr = SaveBinary.ShowDialog();
    if (sr == DialogResult.OK)
    {
        FileName = SaveBinary.FileName;
    }
    try
    {
        using (Stream stream = File.Open(FileName, FileMode.Create))
        {
            BinaryFormatter bin = new BinaryFormatter();
            for (int i = 0; i < ptr; i++)
            {
                save[i] = gameQueueTitle[i] + " " + gameQueueGenre[i] + " " + gameQueuePlat[i];
                bin.Serialize(stream, save);
            }
            MessageBox.Show("File saved");
        }
    }
    catch (IOException)
    {
        MessageBox.Show("The Save Binary Stream did not work");
    }
}

Метод открытия

private void BtngameOpen_Click(object sender, EventArgs e)
{
    string FileName = "gamedata.dat";
    OpenFileDialog OpenBinary = new OpenFileDialog();
    DialogResult sr = OpenBinary.ShowDialog();
    if (sr == DialogResult.OK)
    {
        FileName = OpenBinary.FileName;
    }
    ptr = 0;
    try
    {
        using (Stream stream = File.Open(FileName, FileMode.Open))
        {
            BinaryFormatter bin = new BinaryFormatter();
            while (stream.Position < stream.Length)
            {
                string rec = bin.Deserialize(stream).ToString();
                gameQueueTitle[ptr] = rec;
                gameQueueGenre[ptr] = rec;
                gameQueuePlat[ptr] = rec;
                ptr++;
            }
            SortList();
            DisList();
        }
   }
   catch (IOException)
   {
       MessageBox.Show("Couldn't open the binary file");
   }
}

1 Ответ

0 голосов
/ 24 сентября 2019

Используйте эти два метода в вашем проекте.Сначала преобразуйте Stream в byte[], используя метод blow:

public static byte[] getBytes(Stream input)
{
    using var ms = new MemoryStream();
    var buffer = new byte[16*1024];
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        ms.Write(buffer, 0, read);
    }
    return ms.ToArray();
}

, затем кодируйте в строку UTF-8 этим методом

public string getString(byte[] bytes)
{
    return Encoding.UTF8.GetString(bytes);
}

и импортируйте эту библиотеку

using System.Text
...