Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

запись структуры в бинарный файл в C#

3.6K
07 марта 2008 года
dimas09
92 / / 17.06.2007
Подскажите пожайлуста как можно записать структуру в бинарный файл.
370
08 марта 2008 года
koval
443 / / 29.08.2005
Цитата: dimas09
Подскажите пожайлуста как можно записать структуру в бинарный файл.



Сериализация BinaryFormatter.

3.6K
09 марта 2008 года
dimas09
92 / / 17.06.2007
Код:
mailBox emailbox;
                    FileStream fs = new FileStream(textBox1.Text + "/account.dat", FileMode.Create);
         
                    emailbox.email = textBox1.Text;
                    emailbox.username = textBox2.Text;
                    emailbox.password = textBox3.Text;
                    emailbox.smtpServer = textBox4.Text;
                    emailbox.popServer = textBox5.Text;
                    emailbox.popBeforeSmtp = checkBox1.Checked ? 1 : 0;

                    IFormatter formatter = new BinaryFormatter();
                    try
                    {
                        formatter.Serialize(fs, emailbox);
                    }
                    catch (SerializationException ex)
                    {
                        MessageBox.Show("Відбулася помилка: " + ex.Message, "Помилка",
             MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        throw;
                    }
                    finally
                    {
                        fs.Close();
                    }


Спасибо за совет.
Пытаюсь записать, но сериализация не проходит, получаю ошибку, что данный объект сериализировать нельзя.
14K
09 марта 2008 года
stimpi
100 / / 04.09.2007
при описании стуктуры/класса для сериализации необходимо указать артибут
 
Код:
[Serializable]
3.6K
09 марта 2008 года
dimas09
92 / / 17.06.2007
Запись получилась, теперь пробую считать
 
Код:
mailBox p;
...
p = (mailBox)formatter.Deserialize(fs);

но получаю ошибку: Specified cast is not valid, то есть не хочет преобразовывать в мой тип mailBox. Почему?
14K
09 марта 2008 года
stimpi
100 / / 04.09.2007
весь код приведите где вы сериализуете и десереализуете
3.6K
09 марта 2008 года
dimas09
92 / / 17.06.2007
записываю на другой форме
Код:
[Serializable]
    public struct mailBox
    {
        public string email;
        public string username;
        public string password;
        public string smtpServer;
        public string popServer;
        public int popBeforeSmtp;
    }

........

                    mailBox emailbox;
                    FileStream fs = new FileStream(textBox1.Text + "/account.dat", FileMode.Create);
         
                    emailbox.email = textBox1.Text;
                    emailbox.username = textBox2.Text;
                    emailbox.password = textBox3.Text;
                    emailbox.smtpServer = textBox4.Text;
                    emailbox.popServer = textBox5.Text;
                    emailbox.popBeforeSmtp = checkBox1.Checked ? 1 : 0;

                    IFormatter formatter = new BinaryFormatter();
                    try
                    {
                        formatter.Serialize(fs, emailbox);
                    }
                    catch (SerializationException ex)
                    {
                        MessageBox.Show("Відбулася помилка: " + ex.Message, "Помилка",
             MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        throw;
                    }
                    finally
                    {
                        fs.Close();
                    }


а считываю на главной

Код:
[Serializable]
    public struct mailBox
    {
        public string email;
        public string username;
        public string password;
        public string smtpServer;
        public string popServer;
        public int popBeforeSmtp;
    }

...........
               mailBox p;
               FileStream fs = new FileStream(dri.Name+"/account.dat", FileMode.Open);
                try
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    p = (mailBox)formatter.Deserialize(fs);
                }
                catch (SerializationException ex)
                {
                    MessageBox.Show("Відбулася помилка: " + ex.Message, "Помилка",
                 MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    throw;
                }
                finally
                {
                    fs.Close();
                }
5
09 марта 2008 года
hardcase
4.5K / / 09.08.2005
Оставьте определение структуры mailBox в отдельном файле, и пространстве имен, доступном каждой форме.

У вас ДВЕ структуры. У них одинаковые имена, одинаковые члены, но РАЗНЫЕ TypeId.
3.6K
10 марта 2008 года
dimas09
92 / / 17.06.2007
спасибо все получилось.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог