Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > запись/чтение данных в файл. С++/CLI


Автор: maxfox 3.9.2009, 19:21
Доброго времени суток всем.

Помогите разобраться в чтении/записи числовых данных в файл.
Пишу на с++/CLI в VS 2008 в проекте Windows Forms;

вот, что я сам смог найти по справке/книжкам:
Код

if (Form1::saveFileDialog1->ShowDialog()==System::Windows::Forms::DialogResult::OK)
{
       System::IO::Stream^ filedata;  //заводим переменную для файла
     filedata = System::IO::File::Open(Form1::saveFileDialog1->FileName,System::IO::FileMode::Create);  //  связываем переменную с файлом и открываем файл для чтения/записи
       int value=266;
                        cli::array<unsigned char>^ dataArray;                 //  создаём буфер для записи
             dataArray = gcnew array<unsigned char>(1);     //   инициируем размер на одно число
             dataArray[0] = value;                                           //  записываем число в буфер
       filedata->Write(dataArray,0,dataArray->Length);                //   пишем в файл
     filedata->Close();                               //закрываем файл
}


проект компилится но записывает файл очевидно, неверно. число INT обрезается одним байтом.
Понятно, что для передачи "value"  надо 4 байта вопрос в том, как в этот буфер засунуть число INT?
ведь буфер должен быть массивом типа <unsigned char>...


п.с. Неужели всё так плохо?
может хоть подскажет кто, как расчленить число на составляющие его байты, чтобы записать их в массив??

Автор: maxfox 4.9.2009, 12:28
Вопрос закрыт.
После долгого копания в справке, нашёл стандартные классы, выполняющие запись/чтение данных:

System::IO::BinaryWriter
System::IO::BinaryReader

пример кода записи:
Код

if (Form1::saveFileDialog1->ShowDialog()==System::Windows::Forms::DialogResult::OK)
             {
                 int mCal = 277;
                 System::IO::Stream^ filedata;
                 filedata = System::IO::File::Open(Form1::saveFileDialog1->FileName,System::IO::FileMode::Create);
                 System::IO::BinaryWriter^ bWriter = gcnew System::IO::BinaryWriter(filedata);
                 try
                 {
                     bWriter->Write(mCal);
                     bWriter->Write(mCal+155);
                 }
                 finally
                 {
                     bWriter->Close();
                 }

             }

и пример кода чтения:
Код

 if (Form1::openFileDialog1->ShowDialog()==System::Windows::Forms::DialogResult::OK)
             {
                 System::IO::Stream^ filedata;
                 filedata = System::IO::File::Open(Form1::openFileDialog1->FileName,System::IO::FileMode::Open);
                 System::IO::BinaryReader^ bReader = gcnew System::IO::BinaryReader(filedata);
                 int mCal;
                 listBox1->Items->Clear();
                 try
                 {
                     mCal = bReader->ReadInt32();
                     listBox1->Items->Add(mCal);
                     mCal = bReader->ReadInt32();
                     listBox1->Items->Add(mCal);
                 }
                 finally
                 {
                     bReader->Close();
                 }


             }

удачи в кодинге.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)