Простой пример чтения *.rtf файла из сборки (*.exe,*.dll), и сохранения его на диск.
Таким же образом можно поступить с любым файлом, архивом, текстовым документом, документом excel и т.д.
Добавление файла ресурсов (*.rtf файла) в проект:
1) Открываем Visual Studio 2010 (Visual C# express 2010), создаем проект Windows Form.
2) Открываем свойства (я открываю существующий проект)
Открываем вкладку Resources, находим и вставляем файл который будет “упакован” в нашу сборку:
Обратите внимание, что название файла в составе проекта и ресурсах разные.
Также стоит убедиться, что вы вставили файл *.rtf не как Text file (в принципе, возможно вставить и как текстовый, здесь этот вариант рассматривать не будем).
В свойствах файла в Solution Explorer ставим :
Чтение файла ресурсов *.rtf:
Теперь самое интересное. Добавляем код:
Проверяем, все работает.
Запись файла ресурсов *.rtf на диск:
Таким же образом можно поступить с любым файлом, архивом, текстовым документом, документом excel и т.д.
Добавление файла ресурсов (*.rtf файла) в проект:
1) Открываем Visual Studio 2010 (Visual C# express 2010), создаем проект Windows Form.
2) Открываем свойства (я открываю существующий проект)
Открываем вкладку Resources, находим и вставляем файл который будет “упакован” в нашу сборку:
Обратите внимание, что название файла в составе проекта и ресурсах разные.
Также стоит убедиться, что вы вставили файл *.rtf не как Text file (в принципе, возможно вставить и как текстовый, здесь этот вариант рассматривать не будем).
В свойствах файла в Solution Explorer ставим :
Чтение файла ресурсов *.rtf:
Теперь самое интересное. Добавляем код:
#region Чтение файла из ресурсов (*.rtf)
//Создаем новую форму
Form proba = new Form()
{
StartPosition = FormStartPosition.CenterScreen,
Size = new Size(500, 500)
};
RichTextBox rtb = new RichTextBox()
{
Size = new Size(450, 450)
};
//using System.Text
//using System.IO
using (MemoryStream ms = new MemoryStream())
{
// Считываем файл в массив байтов buffer
byte[] buffer = Properties.Resources._1;
//Возможен еще такой вариант, если вы выставили
//в свойствах файл text:
//byte[] buffer = Encoding.UTF8.GetBytes(Properties.Resources._1);
// Пишем в MemoryStream с первого байта до последнего (buffer.Length)
ms.Write(buffer, 0, buffer.Length);
// Выставляем на начало записи потока
ms.Seek(0, SeekOrigin.Begin);
// Загружаем наш поток MemoryStream в RichTextBox
rtb.LoadFile(ms, RichTextBoxStreamType.RichText);
}
proba.Controls.Add(rtb);
proba.Show(this);
#endregion
Проверяем, все работает.
Запись файла ресурсов *.rtf на диск:
#region Запись файла(файлов) ресурсов на диск
// Файлы ресурсов добавляется через свойства проекта => ресурсы (в
//свойствах ставим binary)
//Создаем объект FolderBrowserDialog
FolderBrowserDialog fb = default(FolderBrowserDialog);
//Путь сохранения файла
string exe_path = null;
fb = new FolderBrowserDialog();
fb.Description = "Выберите папку сохранения файла";
//Если папка выбрана:
if (fb.ShowDialog() == DialogResult.OK & !string.IsNullOrEmpty(fb.SelectedPath))
{
try
{
//Список файлов в ресурсах, перечисляем через запятую
string[] res_files = new string[] { "_1" };
byte[] buff = null;
object objBuff = null;
for (int i = 0; i <= res_files.Length - 1; i++)
{
exe_path = Path.Combine(fb.SelectedPath, res_files[i] + ".rtf");
//Если файл не создан, создаем поток, записываем файл
if (!File.Exists(exe_path))
{
//Создаем объект для временного сохранения каждого файла
objBuff = Properties.Resources.ResourceManager.GetObject(res_files[i]);
//Если файл не пуст обрабатываем
if ((buff = objBuff as byte[]) != null)
{
using (FileStream fs = new FileStream(exe_path, FileMode.Create))
{
//Записываем
fs.Write(buff, 0, buff.Length);
//Сохраняем данные из буффера на диск
fs.Flush();
}
}
}
}
//using System.Diagnostics;
Process.Start(fb.SelectedPath);
}
catch (Exception ex)
{
MessageBox.Show("Проверьте есть ли у вас права доступа для записи файла!\n"
+ ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
#endregion
Vadim Semenov 2012. Email: 5587394@mail.ru
Комментариев нет:
Отправить комментарий