Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему не выводится информация из файла 
:(
    Опции темы
Igoreck
Дата 17.11.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.9.2007

Репутация: нет
Всего: нет



Есть две формы и файл. По событию Click кнопки на первой форме информация из нескольких TextBox - ов вначале заносится в структуру, потом через указатель заносится в байтовый массив а потом пишется в файл:

           
Код

 PACIENT pacient1 = new PACIENT();
            byte[] bufer = new byte[Marshal.SizeOf(pacient1)];
            IntPtr pointer = Marshal.AllocHGlobal(Marshal.SizeOf(pacient1));

            pacient1.фамилия = this.textBox1.Text;
            pacient1.имя = this.textBox2.Text;
            pacient1.отчество = this.textBox3.Text;
            pacient1.день = this.textBox6.Text;
            pacient1.месяц = this.textBox7.Text;
            pacient1.год = this.textBox8.Text;
            pacient1.возраст =this.textBox9.Text;
            pacient1.имя_доктора = this.textBox4.Text;
            pacient1.диагноз  = this.textBox5.Text;
            if (this.textBox1.Text != "")
            {
                Marshal.StructureToPtr(pacient1, pointer, false);
                Marshal.Copy(pointer, bufer, 0, bufer.Length);
                Stream stream2 = new FileStream("E:\\pacient.bin", FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
                stream2.Write(bufer, 0, bufer.Length);
                stream2.Close();
                this.Close();
                уставки_и_работа уставки_и_работа = new уставки_и_работа();
                уставки_и_работа.ShowDialog();
            }
            else
            {
                введите_имя_пациента введите_имя_пациента1 = new введите_имя_пациента();
                введите_имя_пациента1.ShowDialog();
            }
 

По событию Load второй формы все действия совершаются в обратном порядке, только при этом программа вылетает на исключение  System.AccessViolationException   в строке  pacient2 = (PACIENT)Marshal.PtrToStructure(pointer2, typeof(PACIENT)):

Код

if (File.Exists("E:\\pacient.bin"))
            {
                PACIENT pacient2 = new PACIENT();
                byte[] bufer = new byte[Marshal.SizeOf(pacient2)];
                IntPtr pointer2 = Marshal.AllocHGlobal(Marshal.SizeOf(pacient2));
                try
                {
                    Stream stream21 = new FileStream("E:\\pacient.bin", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    stream21.Seek(-(Marshal.SizeOf(pacient2)), SeekOrigin.End);
          //        stream21.Seek(0, SeekOrigin.Begin);

                    stream21.Read(bufer, 0, bufer.Length);
                    Marshal.Copy(bufer, 0, pointer2, bufer.Length);
          //          try
         //           {
                        pacient2 = (PACIENT)Marshal.PtrToStructure(pointer2, typeof(PACIENT));
          //         }
            //        catch(System.AccessViolationException)
           //         {
            //        }
                    this.label3.Text = pacient2.фамилия;
                    this.label4.Text = pacient2.имя;
                    this.label6.Text = pacient2.отчество;
                    this.label1.Text = pacient2.день;
                    this.label14.Text = pacient2.месяц;
                    this.label15.Text = pacient2.год;
                    this.label16.Text = pacient2.возраст;
                    this.label2.Text = pacient2.имя_доктора;
                    this.label5.Text = pacient2.диагноз;
                    stream21.Close();
                }
                finally
                {
                    Marshal.FreeHGlobal(pointer2);
                }


Это сообщение отредактировал(а) Igoreck - 17.11.2008, 21:53
PM MAIL   Вверх
mr.DUDA
Дата 18.11.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Сериализацию лучше используйте.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.