Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 81

Запись в файл блоков с различным типом информации

29.05.2012, 20:11. Показов 2206. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите решить такую проблему:

На форме есть richTextBox и textBox (для примера).
Мне необходимо уметь сохранить в один файл и то и другое.
А так же уметь независимо извлекать содержимое из файла . Для richTextBox - свое содержимое (с учетом форматирования текста), для textBox - свое.

Могу только предположить, что необходимо блоки в файле хранить в байтах, знать объем каждого блока (в байтах) и знать, к какому типу информации относится скаченный блок.

Подскажите, как это воплотить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2012, 20:11
Ответы с готовыми решениями:

Запись в текстовый файл информации о студентах, поиск информации, сортировка
Здравствуйте помогите пожалуйста:( 3.1 Для записи в текстовый файл информации о студентах Вашей группы создать КФ WRITE_FD.BAT со...

Запись в файл блоков данных
Привет! Подскажите, как записывать каждую структуру в бинарном файле с новой строки? #include <iostream> #include...

Запись информации в файл
ку народ,такой вопрос. Есть буржуйская прога, которая считает траектории частиц(PENELOPE, может кто знаком). В этой проге мне необходимо...

9
 Аватар для Smekalisty
42 / 42 / 7
Регистрация: 23.04.2010
Сообщений: 93
30.05.2012, 03:17
Делал похожую задачу. У меня richText выгружался в html, незнаю как у вас.
Я конце тэга </html> добавлял комментарий <!--plain text here--> и вписывал в него текст. Большой плюс - не надо парсить
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 81
30.05.2012, 15:50  [ТС]
Цитата Сообщение от Smekalisty Посмотреть сообщение
выгружался в html, незнаю как у вас
У меня информация должна будет считываться в тот же контрол, откуда и бралась.
Нужно, что бы и текстовая информация (для хранения простого текста) и форматированная информация (для ричЭдитов, HTML и др.) хранилась в одном файле.

Возьмет такой пример (будем считать что данный участок программы уже работает)
Есть файл в котором записано содержимое из
1. из textBox1 размером, например, 200 байт (блок 1)
2. следующим записана информация из richTextBox1 на 2кб (блок 2)
3. следующим записана информация из richTextBox2 на 1кб (блок 3)
4. из textBox2 размером, например, 300 байт (блок 4)

Теперь, что бы прочитать, например, блок 3, нужно в файле пропустить 200 + 2000 байт и затем считать следующие 1000 байт.
Эти считанные 1000 байт поместить в контрол richTextBox.
И т.д.

Информация о том, каким по счету идет блок, его объем и тип данных будет храниться в отдельном файле.

Помогите мне, для понимания, просто создать фиксированный файл с двумя любыми разнотипными данными, и затем считать их в свои контролы. Без дополнительного файла. Это я потом организую сам.

Добавлено через 6 часов 21 минуту
Господа! Поделитесь мыслями.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.05.2012, 19:44
Для начала можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    static class SpecialTextRW
    {
        // Уникальные ID, в данном случае они не нужны,
        // но могут понадобиться при различных способах
        // загрузки данных
        const byte RTF_ID = 37;
        const byte TXT_ID = 181;
 
        public static void Save ( string path, TextBoxBase[] tbArr )
        {
            using ( var file = File.Open( path, FileMode.Create, FileAccess.Write ) )
                Save( file, tbArr );
        }
 
        public static void Save ( Stream stream, TextBoxBase[] tbArr )
        {
            if ( !stream.CanWrite )
                throw new IOException();
 
            var bw = new BinaryWriter( stream );
 
            foreach ( var tb in tbArr )
            {
                if ( tb is RichTextBox )
                {
                    bw.Write( RTF_ID );
                    bw.Write( tb.Name.Length );
                    bw.Write( Encoding.Default.GetBytes( tb.Name ) );
                    bw.Write( (tb as RichTextBox).Rtf.Length );
                    bw.Write( Encoding.Default.GetBytes( (tb as RichTextBox).Rtf ) );
                }
                else
                {
                    bw.Write( RTF_ID );
                    bw.Write( tb.Name.Length );
                    bw.Write( Encoding.Default.GetBytes( tb.Name ) );
                    bw.Write( tb.TextLength );
                    bw.Write( Encoding.Default.GetBytes( tb.Text ) );
                }
            }
        }
 
        public static Dictionary<string, string> Load ( string path )
        {
            Dictionary<string,string> retVal = null;
 
            using ( var file = File.Open( path, FileMode.Open, FileAccess.Read ) )
                retVal = Load( file );
 
            return retVal;
        }
 
        public static Dictionary<string, string> Load ( Stream stream )
        {
            if ( !stream.CanRead )
                throw new IOException();
 
            var br = new BinaryReader( stream );
            string key = null, value = null;
            var retVal = new Dictionary<string, string>();
 
            while ( br.BaseStream.Position != br.BaseStream.Length )
            {
                int id = br.ReadByte();
                switch ( id )
                {
                case RTF_ID:
                case TXT_ID:
                    key = Encoding.Default.GetString( br.ReadBytes( id = br.ReadInt32() ) );
                    if ( !retVal.TryGetValue( key, out value ) )
                        retVal.Add( key, Encoding.Default.GetString( br.ReadBytes( id = br.ReadInt32() ) ) );
                    else
                        retVal[key] += Encoding.Default.GetString( br.ReadBytes( id = br.ReadInt32() ) );
                    break;
                default:
                    throw new NotSupportedException();
                }
            }
 
            return retVal;
        }
    }
Использование:
C#
1
2
3
4
5
6
7
8
9
        private void button1_Click ( object sender, System.EventArgs e )
        {
            SpecialTextRW.Save( "data.txt", new TextBoxBase[] { richTextBox1, textBox1 } );
        }
 
        private void button2_Click ( object sender, EventArgs e )
        {
            var t = SpecialTextRW.Load( "data.txt" );
        }
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 81
02.06.2012, 09:12  [ТС]
SSTREGG,
Спасибо за информацию. Но не во всем разобрался.
Насчет "Save" - все нормально, данные запоминаются в файл. А вот с "Load" - проблема.
Считать обратно данные в контролы не получается. Остаются пустыми.
В чем может быть проблема?
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 81
14.07.2012, 19:32  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
static class SpecialTextRW
* * {
* * * * // Уникальные ID, в данном случае они не нужны,
* * * * // но могут понадобиться при различных способах
* * * * // загрузки данных
* * * * const byte RTF_ID = 37;
* * * * const byte TXT_ID = 181;
Уважаемый SSTREGG. Объясните пожалуйста более подробно - что вы имели ввиду?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
14.07.2012, 21:15
Цитата Сообщение от Alex6911 Посмотреть сообщение
Объясните пожалуйста более подробно - что вы имели ввиду?
Вдруг Вам захочется внести еще какой-нибудь тип данных, для расширяемости.
Цитата Сообщение от Alex6911 Посмотреть сообщение
А вот с "Load" - проблема.
Считать обратно данные в контролы не получается. Остаются пустыми.
В чем может быть проблема?
Load возвращает словарь, в котором Key - это название контрола из которого был взят текст, а Value - сам текст.
1
+B
Заблокирован
14.07.2012, 22:03
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    using System.Collections;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization;
    using System.IO;
 
   [Serializable]
 
    public partial class Form1 : Form
    {
     
        public Form1()
        {
            InitializeComponent();
 
        }
 
 
       void Serialize()
        {
            //создаем объект который будет сериализован
            ArrayList words = new ArrayList();
            words.Add(textBox1.Text);
            words.Add(richTextBox1.Text);           
            words.Add(DateTime.Now);
 
 
            //откроем поток для записи в файл
            FileStream fs = new FileStream(file_name, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            BinaryFormatter bf = new BinaryFormatter();
 
            //сериализация
            bf.Serialize(fs, words);
            fs.Close();
        }
 
        void Deserialize()
        {
            ArrayList words;
            FileStream fs = new FileStream(file_name, FileMode.Open, FileAccess.Read, FileShare.Read);
            BinaryFormatter bf = new BinaryFormatter();
            words = (ArrayList)bf.Deserialize(fs);
            fs.Close();
            //для проверки времени
           // Console.WriteLine(DateTime.Now + \"\\n\\n\");
            textBox1.Text = (string) words[0];
            richTextBox1.Text = (string)words[1];
            this.Text = ((DateTime)words[2]).ToString();
        }
 
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            Serialize();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Deserialize();
        }
 
    }
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 81
15.07.2012, 15:34  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Вдруг Вам захочется внести еще какой-нибудь тип данных, для расширяемости.
RTF_ID = 37;
TXT_ID = 181;
А что конкретно означают эти числа? Или это все условно, как захочу?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
15.07.2012, 15:54
Alex6911, условно, главное чтоб не совпадали.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2012, 15:54
Помогаю со студенческими работами здесь

Запись информации в файл
Есть сайт, html(+javascript), он содержит различную информацию, лежит в папке, и все пользователи в сети его открывают, и читают различную...

Запись информации в файл
У меня есть информация, к примеру, &quot;human&quot; &quot;Bill Gates&quot; &quot;www.gates.com&quot; &quot;business magnate&quot;, к томуже хьюману отнесем &quot;Linus...

Запись информации в файл
Я спёр с хабра код драйвера, и теперь мне нужно его модифицировать. Сам то я в общем разобрался как он работает, но всё равно не пойму, как...

Запись информации в файл
Мне нужно добавить в сущевствующий файл со списком студентов, тех у которых совпадают имена. Совпадающих я нашел и на экран вывел, а вот в...

Запись в файл информации
Надыбал тут на форуме как в файл инфу записывать попробовал с едитом, вот код FILE* pFile = _wfopen( &quot;anketa.bin&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru