Файл с расширением .resx

Для более точного определения формата и программ для открытия файла используйте функцию определения формата файла по расширению и по данным (заголовку) файла.
Программы
- Проигрыватели аудио/видео
- Редакторы изображений
- Текстовые редакторы
- Web-браузеры
- Архиваторы
- Работа с дисками
- Офисные программы/пакеты
Файлы
- Аудио-файлы
- Видео-файлы
- Рисунки, изображения
- Растровые изображения
- Векторные изображения
- 3D-модели, изображения
- CAD-файлы
- Текст, документы
- Электронные таблицы
- Электронные книги
- Архивы, сжатые файлы
- Исполняемые файлы
- Интернет, web файлы
- Файлы игр
- Образы дисков
- Системные файлы
- Файлы шрифтов
- Зашифрованные файлы
- Размеченные документы
- Файлы резервных копий
- Файлы данных
- Файлы баз данных
- Скрипты, исходный код
- Подключаемые модули
- Файлы настроек
- Географические файлы
- Другие файлы
© Open-file.ru, 2008-2024
Работа с RESX-файлами программным способом
Эта статья относится к платформа .NET Framework. Сведения, применимые к .NET 5+ (включая .NET Core), см. в разделе Ресурсы в RESX-файлах.
Поскольку XML-файлы ресурсов (RESX-файлы) должны иметь четко определенный XML-формат (включая заголовок, который должен соответствовать конкретной схеме и за которым следуют данные в парах «имя-значение»), создание этих файлов вручную может приводить к ошибкам. RESX-файлы можно также создавать программным способом, используя типы и члены из библиотеки классов .NET. Кроме того, библиотеку классов .NET можно использовать для извлечения ресурсов, хранящихся в RESX-файлах. В этой статье рассматривается использование типов и членов из пространства имен System.Resources для работы с RESX-файлами.
Здесь рассматривается работа с XML-файлами (RESX-файлами), содержащими ресурсы. Сведения о работе с двоичными файлами ресурсов, внедренными в сборки, см. в статье ResourceManager.
Существуют также способы работы с RESX-файлами, отличные от программных. При добавлении в проект Visual Studio файла ресурсов среда Visual Studio предоставляет интерфейс для создания и обслуживания RESX-файла и во время компиляции автоматически преобразует RESX-файл в RESOURCES-файл. Для непосредственной работы с RESX-файлом можно также использовать текстовый редактор. Однако следует соблюдать осторожность и избегать изменения содержащихся в файле двоичных данных: это может привести к его повреждению.
Создание RESX-файла
Для создания RESX-файла программным способом можно использовать класс System.Resources.ResXResourceWriter , выполнив следующие действия.
- Создайте экземпляр объекта ResXResourceWriter , вызвав метод ResXResourceWriter(String) и указав имя RESX-файла. Имя файла должно включать в себя расширение RESX. Если экземпляр объекта ResXResourceWriter создается в блоке using , явный вызов метода ResXResourceWriter.Close на шаге 3 не требуется.
- Вызовите метод ResXResourceWriter.AddResource для каждого ресурса, который необходимо добавить в файл. Используйте перегрузки этого метода для добавления строки, объекта и двоичных данных (массива байтов). Если ресурсом является объект, он должен быть сериализуемым.
- Вызовите метод ResXResourceWriter.Close для создания файла ресурсов и освобождения всех ресурсов. Если объект ResXResourceWriter был создан в блоке using , ресурсы записываются в RESX-файл, а ресурсы, используемые объектом ResXResourceWriter , освобождаются в конце блока using .
В полученном RESX-файле имеется соответствующий заголовок и тег data для каждого ресурса, добавленного методом ResXResourceWriter.AddResource .
Не следует использовать файлы ресурсов для хранения паролей, конфиденциальной информации или личных данных.
В следующем примере создается RESX-файл с именем CarResources.resx, в котором хранятся шесть строк, значок и два объекта, определяемых приложением (два объекта Automobile ). Класс Automobile , определенный и созданный в этом примере, отмечен атрибутом SerializableAttribute.
using System; using System.Drawing; using System.Resources; [Serializable()] public class Automobile < private string carMake; private string carModel; private int carYear; private int carDoors; private int carCylinders; public Automobile(string make, string model, int year) : this(make, model, year, 0, 0) < >public Automobile(string make, string model, int year, int doors, int cylinders) < this.carMake = make; this.carModel = model; this.carYear = year; this.carDoors = doors; this.carCylinders = cylinders; >public string Make < get < return this.carMake; >> public string Model < get > public int Year < get < return this.carYear; >> public int Doors < get < return this.carDoors; >> public int Cylinders < get < return this.carCylinders; >> > public class Example < public static void Main() < // Instantiate an Automobile object. Automobile car1 = new Automobile("Ford", "Model N", 1906, 0, 4); Automobile car2 = new Automobile("Ford", "Model T", 1909, 2, 4); // Define a resource file named CarResources.resx. using (ResXResourceWriter resx = new ResXResourceWriter(@".\CarResources.resx")) < resx.AddResource("Title", "Classic American Cars"); resx.AddResource("HeaderString1", "Make"); resx.AddResource("HeaderString2", "Model"); resx.AddResource("HeaderString3", "Year"); resx.AddResource("HeaderString4", "Doors"); resx.AddResource("HeaderString5", "Cylinders"); resx.AddResource("Information", SystemIcons.Information); resx.AddResource("EarlyAuto1", car1); resx.AddResource("EarlyAuto2", car2); >> >
Imports System.Drawing Imports System.Resources Public Class Automobile Private carMake As String Private carModel As String Private carYear As Integer Private carDoors AS Integer Private carCylinders As Integer Public Sub New(make As String, model As String, year As Integer) Me.New(make, model, year, 0, 0) End Sub Public Sub New(make As String, model As String, year As Integer, doors As Integer, cylinders As Integer) Me.carMake = make Me.carModel = model Me.carYear = year Me.carDoors = doors Me.carCylinders = cylinders End Sub Public ReadOnly Property Make As String Get Return Me.carMake End Get End Property Public ReadOnly Property Model As String Get Return Me.carModel End Get End Property Public ReadOnly Property Year As Integer Get Return Me.carYear End Get End Property Public ReadOnly Property Doors As Integer Get Return Me.carDoors End Get End Property Public ReadOnly Property Cylinders As Integer Get Return Me.carCylinders End Get End Property End Class Module Example Public Sub Main() ' Instantiate an Automobile object. Dim car1 As New Automobile("Ford", "Model N", 1906, 0, 4) Dim car2 As New Automobile("Ford", "Model T", 1909, 2, 4) ' Define a resource file named CarResources.resx. Using resx As New ResXResourceWriter(".\CarResources.resx") resx.AddResource("Title", "Classic American Cars") resx.AddResource("HeaderString1", "Make") resx.AddResource("HeaderString2", "Model") resx.AddResource("HeaderString3", "Year") resx.AddResource("HeaderString4", "Doors") resx.AddResource("HeaderString5", "Cylinders") resx.AddResource("Information", SystemIcons.Information) resx.AddResource("EarlyAuto1", car1) resx.AddResource("EarlyAuto2", car2) End Using End Sub End Module
Для создания RESX-файлов можно также использовать Visual Studio. Во время компиляции Visual Studio использует генератор файлов ресурсов (Resgen.exe) для преобразования RESX-файла в двоичный файл ресурсов (RESOURCES-файл) и внедряет этот файл в сборку приложения или вспомогательную сборку.
RESX-файл нельзя внедрить в исполняемый файл или скомпилировать во вспомогательную сборку. Необходимо преобразовать RESX-файл в двоичный файл ресурсов (RESOURCES-файл) с помощью генератора файлов ресурсов (Resgen.exe). Затем полученный RESOURCES-файл можно внедрить в сборку приложения или вспомогательную сборку. Дополнительные сведения см. в разделе Создание файлов ресурсов.
Перечисление ресурсов
В некоторых случаях может потребоваться извлечь из RESX-файла все ресурсы, а не конкретный ресурс. Для этого можно использовать класс System.Resources.ResXResourceReader , предоставляющий перечислитель для всех ресурсов в RESX-файле. Класс System.Resources.ResXResourceReader реализует перечислитель IDictionaryEnumerator, который возвращает объект DictionaryEntry , представляющий конкретный ресурс для каждой итерации цикла. Его свойство DictionaryEntry.Key возвращает ключ ресурса, а свойство DictionaryEntry.Value — значение ресурса.
В следующем примере создается объект ResXResourceReader для файла CarResources.resx, созданного в предыдущем примере, а затем выполняются итерации по файлу ресурсов. В этом примере в объект Automobile добавляются два объекта System.Collections.Generic.List , определенные в файле ресурсов, а в объект SortedList добавляются пять строк из шести. Значения в объекте SortedList преобразуются в массив параметров, который используется для отображения заголовков столбцов в консоли. Значения свойства Automobile также выводятся на консоль.
using System; using System.Collections; using System.Collections.Generic; using System.Resources; public class Example < public static void Main() < string resxFile = @".\CarResources.resx"; Listautos = new List(); SortedList headers = new SortedList(); using (ResXResourceReader resxReader = new ResXResourceReader(resxFile)) < foreach (DictionaryEntry entry in resxReader) < if (((string) entry.Key).StartsWith("EarlyAuto")) autos.Add((Automobile) entry.Value); else if (((string) entry.Key).StartsWith("Header")) headers.Add((string) entry.Key, (string) entry.Value); >> string[] headerColumns = new string[headers.Count]; headers.GetValueList().CopyTo(headerColumns, 0); Console.WriteLine(" \n", headerColumns); foreach (var auto in autos) Console.WriteLine(" ", auto.Make, auto.Model, auto.Year, auto.Doors, auto.Cylinders); > > // The example displays the following output: // Make Model Year Doors Cylinders // // Ford Model N 1906 0 4 // Ford Model T 1909 2 4
Imports System.Collections Imports System.Collections.Generic Imports System.Resources Module Example Public Sub Main() Dim resxFile As String = ".\CarResources.resx" Dim autos As New List(Of Automobile) Dim headers As New SortedList() Using resxReader As New ResXResourceReader(resxFile) For Each entry As DictionaryEntry In resxReader If CType(entry.Key, String).StartsWith("EarlyAuto") Then autos.Add(CType(entry.Value, Automobile)) Else If CType(entry.Key, String).StartsWith("Header") Then headers.Add(CType(entry.Key, String), CType(entry.Value, String)) End If Next End Using Dim headerColumns(headers.Count - 1) As String headers.GetValueList().CopyTo(headerColumns, 0) Console.WriteLine(" ", headerColumns) Console.WriteLine() For Each auto In autos Console.WriteLine(" ", auto.Make, auto.Model, auto.Year, auto.Doors, auto.Cylinders) Next End Sub End Module ' The example displays the following output: ' Make Model Year Doors Cylinders ' ' Ford Model N 1906 0 4 ' Ford Model T 1909 2 4
Получение определенного ресурса
Помимо перечисления элементов в RESX-файле, можно извлечь конкретный ресурс по имени, используя класс System.Resources.ResXResourceSet . Метод ResourceSet.GetString(String) извлекает значение именованного строкового ресурса. Метод ResourceSet.GetObject(String) извлекает значение именованного объекта или двоичные данные. Этот метод возвращает объект, который затем должен быть приведен (в C#) или преобразован (в Visual Basic) в объект нужного типа.
В следующем примере извлекается строка заголовка и значок формы по именам ресурсов. В нем также извлекаются определяемые приложением объекты Automobile , использованные в предыдущем примере, и эти объекты отображаются в элементе управления DataGridView.
using System; using System.Collections.Generic; using System.Drawing; using System.Resources; using System.Windows.Forms; public class CarDisplayApp : Form < private const string resxFile = @".\CarResources.resx"; Automobile[] cars; public static void Main() < CarDisplayApp app = new CarDisplayApp(); Application.Run(app); >public CarDisplayApp() < // Instantiate controls. PictureBox pictureBox = new PictureBox(); pictureBox.Location = new Point(10, 10); this.Controls.Add(pictureBox); DataGridView grid = new DataGridView(); grid.Location = new Point(10, 60); this.Controls.Add(grid); // Get resources from .resx file. using (ResXResourceSet resxSet = new ResXResourceSet(resxFile)) < // Retrieve the string resource for the title. this.Text = resxSet.GetString("Title"); // Retrieve the image. Icon image = (Icon) resxSet.GetObject("Information", true); if (image != null) pictureBox.Image = image.ToBitmap(); // Retrieve Automobile objects. ListcarList = new List(); string resName = "EarlyAuto"; Automobile auto; int ctr = 1; do < auto = (Automobile) resxSet.GetObject(resName + ctr.ToString()); ctr++; if (auto != null) carList.Add(auto); >while (auto != null); cars = carList.ToArray(); grid.DataSource = cars; > > >
Imports System.Collections.Generic Imports System.Drawing Imports System.Resources Imports System.Windows.Forms Public Class CarDisplayApp : Inherits Form Private Const resxFile As String = ".\CarResources.resx" Dim cars() As Automobile Public Shared Sub Main() Dim app As New CarDisplayApp() Application.Run(app) End Sub Public Sub New() ' Instantiate controls. Dim pictureBox As New PictureBox() pictureBox.Location = New Point(10, 10) Me.Controls.Add(pictureBox) Dim grid As New DataGridView() grid.Location = New Point(10, 60) Me.Controls.Add(grid) ' Get resources from .resx file. Using resxSet As New ResXResourceSet(resxFile) ' Retrieve the string resource for the title. Me.Text = resxSet.GetString("Title") ' Retrieve the image. Dim image As Icon = CType(resxSet.GetObject("Information", True), Icon) If image IsNot Nothing Then pictureBox.Image = image.ToBitmap() End If ' Retrieve Automobile objects. Dim carList As New List(Of Automobile) Dim resName As String = "EarlyAuto" Dim auto As Automobile Dim ctr As Integer = 1 Do auto = CType(resxSet.GetObject(resName + ctr.ToString()), Automobile) ctr += 1 If auto IsNot Nothing Then carList.Add(auto) Loop While auto IsNot Nothing cars = carList.ToArray() grid.DataSource = cars End Using End Sub End Class
Преобразование RESX-файлов в двоичные RESOURCES-файлы
Преобразование RESX-файлов во внедряемые двоичные файлы ресурсов (RESOURCES-файлы) имеет значительные преимущества. Хотя RESX-файлы легко читаются и обслуживаются при развертывании приложения, они редко поставляются с готовыми приложениями. Если они распространяются с приложением, то существуют в виде отдельных файлов наряду с исполняемым файлом приложения и сопровождающими его библиотеками. В отличие от RESX-файлов RESOURCES-файлы внедряются в исполняемый файл приложения или сопровождающие его сборки. Кроме того, если локализованные приложения полагаются на RESX-файлы во время выполнения, это означает, что ответственность за обработку перехода к другим ресурсам несет разработчик. Напротив, если создан ряд вспомогательных сборок, содержащих внедренные RESOURCES-файлы, процесс перехода на резервные ресурсы обрабатывается средой CLR.
Для преобразования RESX-файла в RESOURCES-файл используется генератор файлов ресурсов (resgen.exe), который имеет следующий базовый синтаксис:
resgen.exe .resxFilename
Результат — двоичный файл ресурсов, который имеет такое же корневое имя файла, что и RESX-файл, и расширение RESOURCES-файла. Затем во время компиляции этот файл может быть компилирован в исполняемый файл или библиотеку. Если применяется компилятор Visual Basic, для внедрения RESOURCES-файла в исполняемый файл приложения используйте следующий синтаксис:
vbc filename .vb -resource: .resourcesFilename
При использовании C# синтаксис следующий:
csc filename .cs -resource: .resourcesFilename
Затем RESOURCES-файл может быть также внедрен во вспомогательную сборку с помощью компоновщика сборок (al.exe), который имеет следующий базовый синтаксис:
al resourcesFilename -out: assemblyFilename
См. также раздел
- Создание файлов ресурсов
- Генератор файлов ресурсов (resgen.exe))
- Компоновщик сборок (al.exe)
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
.resx Расширение файла
This file is saved in a binary format, which requires a specific program to read its contents.
.RESX вариант №
Файл ресурсов, используемый программами, разработанными с использованием .NET Framework Microsoft; хранит объекты и строки для программы в формате XML; может содержать как текстовую информацию, так и двоичные данные, которая кодируется как текст в тегах XML.
Больше информации
Файлы RESX обычно используются для хранения настроек приложения и других программных ресурсов, таких как изображения. Если они будут реализованы правильно, они могут быть заменены на другие пакеты ресурсов, без повторной компиляции приложения. Это полезно при локализации программ в разных средах.
Даже если файлы RESX могут содержать двоичные данные, они все равно могут быть просмотрены с помощью любого текстового редактора и проанализированы с помощью стандартного анализатора XML. Двоичные объекты кодируются внутри & lt; данных & gt; теги, которые включают свойства для программы и типы MIME. Приложение может декодировать двоичные объекты с помощью типа программы.
Формат файла RESX — описание, как открыть?
Файл формата RESX открывается специальными программами. Чтобы открыть данный формат, скачайте одну из предложенных программ.
Чем открыть файл в формате RESX
Тип файла: .NET Managed Resources File Разработчик: Microsoft Категория: Разработка ПО
Файл-источник, используемый программами, разрабатываемыми с помощью Microsoft’s .NET Framework. Хранит объекты и строки программы в формате XML. Может содержать и обычную текстовую информацию, и данные в бинарном формате, которые закодированы в виде текста с тегами XML.
Файлы формата RESX обычно используются для хранения настроек приложения и других ресурсов программы, например, изображений. Если они приводятся в исполнение корректно, их можно выгружать для других комплектов ресурсов, при этом не занимаясь снова компиляцией приложения. Это полезно для местного размещения программ в различных конфигурациях.
Несмотря на то, что файлы RESX могут содержать бинарные данные, их можно просматривать в любом текстовом редакторе и разбирать с помощью стандартного XML-анализа. Бинарные данные шифруются при помощи тегов, включающих в себя свойства программ и MIME типов. Приложение может декодировать бинарные объекты при помощи программных типов.
Чем открыть файл в формате RESX (.NET Managed Resources File)