Як читати вбудований текстовий файл ресурсу


694

Як я читаю вбудований ресурс (текстовий файл), використовуючи StreamReaderта повертаючи його як рядок? Мій поточний сценарій використовує форму та текстове поле Windows, що дозволяє користувачеві знаходити та замінювати текст у текстовому файлі, який не вбудований.

private void button1_Click(object sender, EventArgs e)
{
    StringCollection strValuesToSearch = new StringCollection();
    strValuesToSearch.Add("Apple");
    string stringToReplace;
    stringToReplace = textBox1.Text;

    StreamReader FileReader = new StreamReader(@"C:\MyFile.txt");
    string FileContents;
    FileContents = FileReader.ReadToEnd();
    FileReader.Close();
    foreach (string s in strValuesToSearch)
    {
        if (FileContents.Contains(s))
            FileContents = FileContents.Replace(s, stringToReplace);
    }
    StreamWriter FileWriter = new StreamWriter(@"MyFile.txt");
    FileWriter.Write(FileContents);
    FileWriter.Close();
}

Відповіді:


1197

Ви можете використовувати Assembly.GetManifestResourceStreamметод :

  1. Додайте наступні вставки

    using System.IO;
    using System.Reflection;
    
  2. Встановити властивість відповідного файлу:
    Параметр Build Actionзі значеннямEmbedded Resource

  3. Використовуйте наступний код

    var assembly = Assembly.GetExecutingAssembly();
    var resourceName = "MyCompany.MyProduct.MyFile.txt";
    
    using (Stream stream = assembly.GetManifestResourceStream(resourceName))
    using (StreamReader reader = new StreamReader(stream))
    {
        string result = reader.ReadToEnd();
    }
    

    resourceName- назва одного з вбудованих ресурсів assembly. Наприклад, якщо ви вставили текстовий файл з ім'ям, "MyFile.txt"який розміщений у корені проекту із простором імен за замовчуванням "MyCompany.MyProduct", то resourceNameє "MyCompany.MyProduct.MyFile.txt". Ви можете отримати список усіх ресурсів у складі за допомогою Assembly.GetManifestResourceNamesметоду .


Ніхто не сприймає розум, щоб отримати лише resourceNameз імені файлу (пропустити речі простору імен):

string resourceName = assembly.GetManifestResourceNames()
  .Single(str => str.EndsWith("YourFileName.txt"));

Повний приклад:

public string ReadResource(string name)
{
    // Determine path
    var assembly = Assembly.GetExecutingAssembly();
    string resourcePath = name;
    // Format: "{Namespace}.{Folder}.{filename}.{Extension}"
    if (!name.StartsWith(nameof(SignificantDrawerCompiler)))
    {
        resourcePath = assembly.GetManifestResourceNames()
            .Single(str => str.EndsWith(name));
    }

    using (Stream stream = assembly.GetManifestResourceStream(resourcePath))
    using (StreamReader reader = new StreamReader(stream))
    {
        return reader.ReadToEnd();
    }
}

5
@ Me.Close: Подивіться, Environment.SpecialFolderщоб отримати папку на робочому столі. Потрібно мати на увазі, що ресурс буде розподілений назви на основі його шляху в рамках проекту, тому його ім'я може бути не просто file1.txt.
adrianbanks

15
Аргумент для GetManifestResourceStreamпотреби має шлях, як вказує @adrian. Якщо це допомагає будь-кому, що шлях, як то , що @SimpleCoder показує в прикладі: MyNamespace.Filename.Ext. Я раніше пробував, MyNamespace.Resources.Filename.Extале це призводить до нуля.
JYelton

61
Якщо у вас ресурс не безпосередньо в корені проекту, а в якійсь папці, не забудьте також вказати це ім’я в папку resourceName (наприклад, "MyProjectNameSpace.MyProjectSubFolder.FileName.FileExtention")
Саша

19
Варто сказати, що ресурс "Build Action" повинен бути встановлений як "Вбудований ресурс"
Іллідан

7
Один важливий момент, який тут не висвітлюється. Якщо ви зберегли свій файл як альтернативний тип кодування, щоб впоратися з непарними символами (в моєму випадку UTF8), ви можете повернути порожній файл під час читання потоку. Виправте це, вказавши тип кодування в конструкторі зчитувача потоків:using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Kinetic

140

Ви можете додати файл як ресурс двома окремими методами.

Код C #, необхідний для доступу до файлу, різний , залежно від способу, який використовується для додавання файлу в першу чергу.

Спосіб 1: Додайте існуючий файл, встановіть властивість Embedded Resource

Додайте файл до свого проекту, а потім встановіть тип Embedded Resource.

ПРИМІТКА. Якщо ви додасте файл за допомогою цього методу, ви можете використовувати його GetManifestResourceStreamдля доступу (див. Відповідь від @dtb ).

введіть тут опис зображення

Спосіб 2. Додайте файл до Resources.resx

Відкрийте Resources.resxфайл, використовуйте спадне поле, щоб додати файл, встановлений Access Modifierу public.

ПРИМІТКА. Якщо ви додасте файл за допомогою цього методу, ви можете використовувати його Properties.Resourcesдля доступу (див. Відповідь від @Night Walker ).

введіть тут опис зображення


5
Третій спосіб - додати файл до проекту, а потім встановити «Копіювати у вихідний каталог» значення «Істинно». При компіляції файл копіюється у вихідний dir, і ви можете прочитати файл звичайними засобами. Приклад: у програмі WPF, коли потрібно відобразити зображення.
Контанго

тому встановлення дії збірки Resourceне робить нічого, що дозволяє зчитувати елемент як ресурс? ви повинні використовувати EmbeddedResourceабо додати до Resources.resxфайлу?
Маслоу

3
@Maslow Встановлення дії збірки на "Ресурс" створює пов'язаний ресурс, тоді як встановлення дії збірки на "Вбудований ресурс" збирає ресурс у вихідну збірку. Термін "пов'язаний ресурс" - це фантазійний термін для "копіювання файлу у вихідний каталог при компіляції" (потім ви можете прочитати файл під час виконання, використовуючи будь-який звичайний метод). Докладніше про різницю між цими двома типами див. У розділі Додавання та редагування ресурсів (Visual C #) за адресою msdn.microsoft.com/en-us/library/7k989cfy(v=vs.90).aspx .
Контанго

Якщо ви хотіли б використовувати ресурси таким чином, але динамічно, тільки замість цього: Properties.Resources.Your_resource_name пишу це: Properties.Resources.ResourceManager.GetObject("Your_resource_name").
Лкор

86

В основному ви використовуєте System.Reflectionдля отримання посилання на поточну асамблею. Потім, ви використовуєте GetManifestResourceStream().

Приклад, зі сторінки, яку я опублікував:

Примітка : using System.Reflection;для цього потрібно додати

   Assembly _assembly;
   StreamReader _textStreamReader;

   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }

32
+1 За включення до namespaceскладу назви ресурсу
Кірк Бродхерст

41
var auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames(); Цей метод може бути дуже корисним, коли ви хочете дізнатися точну назву ресурсу. (Взято з питання stackoverflow.com/questions/27757/… )
Оскар Фолі

69

У Visual Studio ви можете безпосередньо вбудовувати доступ до файлового ресурсу через вкладку "Ресурси" властивостей проекту ("Аналітика" в цьому прикладі). знімок екрану візуальної студії - вкладка "Ресурси"

Потім отриманий файл може отримати доступ до масиву байтів

byte[] jsonSecrets = GoogleAnalyticsExtractor.Properties.Resources.client_secrets_reporter;

Якщо вам це потрібно як потік, тоді (з https://stackoverflow.com/a/4736185/432976 )

Stream stream = new MemoryStream(jsonSecrets)

11
Ви також можете використовувати це з текстовим файлом, і в цьому випадку у вас буде: string jsonSecrets = YourNameSpace.Properties.Resources.YourFileName;
ouflak

30

Коли ви додали файл до ресурсів, слід вибрати його Модифікатори доступу як загальнодоступні, ніж ви можете зробити щось на кшталт наступного.

byte[] clistAsByteArray = Properties.Resources.CLIST01;

CLIST01 - це ім'я вбудованого файлу.

Насправді ви можете зайти на resource.Designer.cs і подивитися, як називається геттер.


5
Не могли б ви пояснити це докладніше? Коли я клацніть правою кнопкою миші-> властивості у файлі в провіднику рішень, а потім встановіть Actionзначення Incorporated ressource, у мене немає Access Modifiersполя на панелі властивостей. Також у мене немає Propersites.Resourcesкласу, я отримую The name 'Properties' does not exist in the current contextпомилку при складанні вашого коду.
Сюзанна Дуперон

2
Це спрацює лише в тому випадку, якщо ви вставите файл Resources.resx, дивіться мою відповідь про різні методи вбудовування файлів у проект.
Контанго

13

додавання, наприклад, Меню проекту Testfile.sql -> Властивості -> Ресурси -> Додати існуючий файл

    string queryFromResourceFile = Properties.Resources.Testfile.ToString();

введіть тут опис зображення


2
Він поверне байт [], для текстових файлів використовують `Encoding.UTF8.GetString (Properties.Resources.Testfile)`
MikeTheCoder

12

Я знаю, що це стара тема, але це те, що для мене спрацювало:

  1. додати текстовий файл до ресурсів проекту
  2. встановити публічний модифікатор доступу, як показав Ендрю Хілл
  3. читайте текст так:

    textBox1 = new TextBox();
    textBox1.Text = Properties.Resources.SomeText;

Текст, який я додав до ресурсів: "SomeText.txt"


8

Ви також можете використовувати цю спрощену версію відповіді @ dtb:

public string GetEmbeddedResource(string ns, string res)
{
    using (var reader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format("{0}.{1}", ns, res))))
    {
        return reader.ReadToEnd();
    }
}

Ви впевнені в цьому? за цим посиланням , це виглядає , як я .... stackoverflow.com/questions/1065168 / ...
Timmerz

8

Щось я дізнався зараз, це те, що у вашому файлі заборонено мати "." (крапка) у назві файлу.

"".  в імені файлу - це не добре.

Templates.plainEmailBodyTemplate-en.txt -> Працює !!!
Templates.plainEmailBodyTemplate.en.txt -> не працює через GetManifestResourceStream ()

Можливо, тому, що рамка плутається через простори імен проти назви файлів ...


3
Вибачте. Це неправильно. Точки працюють. (принаймні, це працювало для мене, NET4.5) Я не знаю, чому у вас виникла ця помилка.
Фелікс Кіль

Так, вони працюють, але вони діють як роздільник каталогів. Templates.plainEmailBodyTemplate.en.txt шукатиме ресурс "\ Templates \ plainEmailBodyTemplate \ en.txt"
Peter Gfader

Ні. Я спробував це. GetManifestResourceStream може отримати доступ до вбудованих ресурсів з більш ніж однією крапкою у імені файлу. (NET4.5)
Фелікс

1
У мене була така ж проблема в .NET 4.5. Файли з крапками в імені навіть не додані до колекції ресурсів. Метод Assembly.GetManifestResourceNames () повертає мені порожній список. Пізніше я з’ясував, що проблема стосується лише мовного коду. ca.abcd.sk.crt не додано до ресурсів, тоді як ca.abcd.crt додано без проблем.
a.farkas2508

1
Все ще правильно у 2020 році. Дякую за це, я з цим з глузду з’їхав.
ZeRemz

8

Я, використовуючи всі ваші повноваження, використовую цей клас помічників для читання ресурсів з будь-якої збірки та будь-якого простору імен загальним способом.

public class ResourceReader
{
    public static IEnumerable<string> FindEmbededResources<TAssembly>(Func<string, bool> predicate)
    {
        if (predicate == null) throw new ArgumentNullException(nameof(predicate));

        return
            GetEmbededResourceNames<TAssembly>()
                .Where(predicate)
                .Select(name => ReadEmbededResource(typeof(TAssembly), name))
                .Where(x => !string.IsNullOrEmpty(x));
    }

    public static IEnumerable<string> GetEmbededResourceNames<TAssembly>()
    {
        var assembly = Assembly.GetAssembly(typeof(TAssembly));
        return assembly.GetManifestResourceNames();
    }

    public static string ReadEmbededResource<TAssembly, TNamespace>(string name)
    {
        if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name));
        return ReadEmbededResource(typeof(TAssembly), typeof(TNamespace), name);
    }

    public static string ReadEmbededResource(Type assemblyType, Type namespaceType, string name)
    {
        if (assemblyType == null) throw new ArgumentNullException(nameof(assemblyType));
        if (namespaceType == null) throw new ArgumentNullException(nameof(namespaceType));
        if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name));

        return ReadEmbededResource(assemblyType, $"{namespaceType.Namespace}.{name}");
    }

    public static string ReadEmbededResource(Type assemblyType, string name)
    {
        if (assemblyType == null) throw new ArgumentNullException(nameof(assemblyType));
        if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name));

        var assembly = Assembly.GetAssembly(assemblyType);
        using (var resourceStream = assembly.GetManifestResourceStream(name))
        {
            if (resourceStream == null) return null;
            using (var streamReader = new StreamReader(resourceStream))
            {
                return streamReader.ReadToEnd();
            }
        }
    }
}

3
плюс один для капітана планети: P
Алок

4

Я читаю використання вбудованого текстового файлу ресурсу:

    /// <summary>
    /// Converts to generic list a byte array
    /// </summary>
    /// <param name="content">byte array (embedded resource)</param>
    /// <returns>generic list of strings</returns>
    private List<string> GetLines(byte[] content)
    {
        string s = Encoding.Default.GetString(content, 0, content.Length - 1);
        return new List<string>(s.Split(new[] { Environment.NewLine }, StringSplitOptions.None));
    }

Зразок:

var template = GetLines(Properties.Resources.LasTemplate /* resource name */);

template.ForEach(ln =>
{
    Debug.WriteLine(ln);
});

3

Я знаю, що це по-старому, але я просто хотів вказати на NETMF (.Net MicroFramework), ви можете легко зробити це:

string response = Resources.GetString(Resources.StringResources.MyFileName);

Оскільки NETMF не маєGetManifestResourceStream


3

Прочитавши всі розміщені тут рішення. Ось як я це вирішив:

// How to embedded a "Text file" inside of a C# project
//   and read it as a resource from c# code:
//
// (1) Add Text File to Project.  example: 'myfile.txt'
//
// (2) Change Text File Properties:
//      Build-action: EmbeddedResource
//      Logical-name: myfile.txt      
//          (note only 1 dot permitted in filename)
//
// (3) from c# get the string for the entire embedded file as follows:
//
//     string myfile = GetEmbeddedResourceFile("myfile.txt");

public static string GetEmbeddedResourceFile(string filename) {
    var a = System.Reflection.Assembly.GetExecutingAssembly();
    using (var s = a.GetManifestResourceStream(filename))
    using (var r = new System.IO.StreamReader(s))
    {
        string result = r.ReadToEnd();
        return result;
    }
    return "";      
}

3

Відповідь досить проста, просто зробіть це, якщо ви додали файл безпосередньо з ресурси.resx.

string textInResourceFile = fileNameSpace.Properties.Resources.fileName;

За допомогою цього рядка коду текст з файлу читається безпосередньо з файлу та вводиться у змінну рядка.


2

Мене дратувало, що вам потрібно завжди включати в рядок простір імен та папку. Я хотів спростити доступ до вбудованих ресурсів. Ось чому я написав цей маленький клас. Сміливо користуйтесь та вдосконалюйтесь!

Використання:

using(Stream stream = EmbeddedResources.ExecutingResources.GetStream("filename.txt"))
{
 //...
}

Клас:

public class EmbeddedResources
{
    private static readonly Lazy<EmbeddedResources> _callingResources = new Lazy<EmbeddedResources>(() => new EmbeddedResources(Assembly.GetCallingAssembly()));

    private static readonly Lazy<EmbeddedResources> _entryResources = new Lazy<EmbeddedResources>(() => new EmbeddedResources(Assembly.GetEntryAssembly()));

    private static readonly Lazy<EmbeddedResources> _executingResources = new Lazy<EmbeddedResources>(() => new EmbeddedResources(Assembly.GetExecutingAssembly()));

    private readonly Assembly _assembly;

    private readonly string[] _resources;

    public EmbeddedResources(Assembly assembly)
    {
        _assembly = assembly;
        _resources = assembly.GetManifestResourceNames();
    }

    public static EmbeddedResources CallingResources => _callingResources.Value;

    public static EmbeddedResources EntryResources => _entryResources.Value;

    public static EmbeddedResources ExecutingResources => _executingResources.Value;

    public Stream GetStream(string resName) => _assembly.GetManifestResourceStream(_resources.Single(s => s.Contains(resName)));

}

1
А як щодо супер простого рішення: var resName = Assembly.GetManifestResourceNames (). Де (i => i.EndsWith (fileName)). FirstOrDefault (); Це не спрацює, якщо ви розмістите цілі каталоги на збірку, але в іншому випадку це лише один рядок;)
Гаррі,

@ Посвідчись, що ти можеш це зробити. Як це корелює з моєю відповіддю? Ви хочете вдосконалити метод GetStream? І як ви тоді поводиться з двозначністю?
Фелікс Кіль

1
@Estevez за допомогою системи; за допомогою System.IO; за допомогою System.Linq; за допомогою System.Reflection;
Фелікс Кейл

2
Чомусь клас не працює, коли розміщується в іншому проекті. Виклики та виконання збірок відносяться до складання цього класу, а не до того, що фактично виконує тести. Без статичної та лінивої ініціалізації все добре, тхо.
Кучерявий Брейс

1
@CurlyBrace Дякую Ледача оцінка є справжньою вадою у цій відповіді, тому що виклики та виконуючі збори змінюються залежно від контексту. Їх потрібно вирішувати при кожному доступі.
Фелікс Кейл

2

Деякі типи проектів VS .NET не генерують автоматично файл .NET (.resx). Наступні кроки додають файл ресурсу до вашого проекту:

  1. Клацніть правою кнопкою миші вузол проекту та виберіть Додати / Новий елемент, перейдіть до Файл ресурсів. У полі Ім'я виберіть відповідне ім'я, наприклад Ресурси та натисніть кнопку Додати.
  2. Файл ресурсу Resources.resx додається до проекту і може розглядатися як вузол у провіднику рішень.
  3. Насправді два файли створюються, також існує автоматично створений C # class Resources.Designer.cs. Не редагуйте це, його підтримує VS. Файл містить клас з назвою Resources.

Тепер ви можете додати текстовий файл як ресурс, наприклад xml-файл:

  1. Двічі клацніть Resources.resx. Виберіть Додати ресурс> Додати існуючий файл та перейдіть до файла, який потрібно включити. Залиште значення за замовчуванням внутрішнє для зміни доступу.
  2. Піктограма представляє новий елемент ресурсу. Якщо вибрано, панель властивостей показує його властивості. Для XML-файлів у властивості кодування виберіть Unicode (UTF-8) - Codepage 65001 замість локальної кодової сторінки за замовчуванням. Для інших текстових файлів виберіть правильне кодування цього файлу, наприклад, кодова сторінка 1252.
  3. Для текстових файлів, таких як XML-файли, клас Resourcesмає властивість типу, stringяке називається після включеного файлу. Якщо ім'я файлу, наприклад, RibbonManifest.xml, то властивість має мати ім'я RibbonManifest. Точне ім’я ви знайдете у файлі коду Resources.Designer.cs.
  4. Використовуйте властивість рядка , як і будь-який інший рядки власності, наприклад: string xml = Resources.RibbonManifest. Загальна форма така ResourceFileName.IncludedTextFileName. Не використовуйте, ResourceManager.GetStringоскільки функція get-функції властивості string вже зробила це.

1
public class AssemblyTextFileReader
{
    private readonly Assembly _assembly;

    public AssemblyTextFileReader(Assembly assembly)
    {
        _assembly = assembly ?? throw new ArgumentNullException(nameof(assembly));
    }

    public async Task<string> ReadFileAsync(string fileName)
    {
        var resourceName = _assembly.GetManifestResourceName(fileName);

        using (var stream = _assembly.GetManifestResourceStream(resourceName))
        {
            using (var reader = new StreamReader(stream))
            {
                return await reader.ReadToEndAsync();
            }
        }
    }
}

public static class AssemblyExtensions
{
    public static string GetManifestResourceName(this Assembly assembly, string fileName)
    {
        string name = assembly.GetManifestResourceNames().SingleOrDefault(n => n.EndsWith(fileName, StringComparison.InvariantCultureIgnoreCase));

        if (string.IsNullOrEmpty(name))
        {
            throw new FileNotFoundException($"Embedded file '{fileName}' could not be found in assembly '{assembly.FullName}'.", fileName);
        }

        return name;
    }
}

0

Це клас, який може бути дуже зручним для читання вбудованих файлів ресурсів із поточного Assembly:

using System.IO;
using System.Linq;
using System.Text;
using static System.IO.Path;
using static System.Reflection.Assembly;

public static class EmbeddedResourceUtils
{
    public static string ReadFromResourceFile(string endingFileName)
    {
        var assembly = GetExecutingAssembly();
        var manifestResourceNames = assembly.GetManifestResourceNames();

        foreach (var resourceName in manifestResourceNames)
        {
            var fileNameFromResourceName = _GetFileNameFromResourceName(resourceName);
            if (!fileNameFromResourceName.EndsWith(endingFileName))
            {
                continue;
            }

            using (var manifestResourceStream = assembly.GetManifestResourceStream(resourceName))
            {
                if (manifestResourceStream == null)
                {
                    continue;
                }

                using (var streamReader = new StreamReader(manifestResourceStream))
                {
                    return streamReader.ReadToEnd();
                }
            }
        }

        return null;
    }

    // https://stackoverflow.com/a/32176198/3764804
    private static string _GetFileNameFromResourceName(string resourceName)
    {
        var stringBuilder = new StringBuilder();
        var escapeDot = false;
        var haveExtension = false;

        for (var resourceNameIndex = resourceName.Length - 1;
            resourceNameIndex >= 0;
            resourceNameIndex--)
        {
            if (resourceName[resourceNameIndex] == '_')
            {
                escapeDot = true;
                continue;
            }

            if (resourceName[resourceNameIndex] == '.')
            {
                if (!escapeDot)
                {
                    if (haveExtension)
                    {
                        stringBuilder.Append('\\');
                        continue;
                    }

                    haveExtension = true;
                }
            }
            else
            {
                escapeDot = false;
            }

            stringBuilder.Append(resourceName[resourceNameIndex]);
        }

        var fileName = GetDirectoryName(stringBuilder.ToString());
        return fileName == null ? null : new string(fileName.Reverse().ToArray());
    }
}

0

Для всіх людей, які просто швидко хочуть текст файлів із твердим кодом у форматі win;

  1. Клацніть правою кнопкою миші вашу програму в Провіднику рішень> Ресурси> Додати файл.
  2. Клацніть по ньому, а на вкладці властивостей встановіть "Тип файлу" на "Текст".
  3. У вашій програмі просто Resources.<name of resource>.toString();потрібно прочитати файл.

Я б не рекомендував це як найкращу практику чи що-небудь, але воно працює швидко і робить все, що для цього потрібно.


0

Для користувачів, які використовують VB.Net

Imports System.IO
Imports System.Reflection

Dim reader As StreamReader
Dim ass As Assembly = Assembly.GetExecutingAssembly()
Dim sFileName = "MyApplicationName.JavaScript.js" 
Dim reader = New StreamReader(ass.GetManifestResourceStream(sFileName))
Dim sScriptText = reader.ReadToEnd()
reader.Close()

де MyApplicationNameпростір імен моєї програми. Це не назва складання. Ця назва визначається у властивостях проекту (вкладка Application).

Якщо ви не знайдете правильне ім’я ресурсу, ви можете скористатися GetManifestResourceNames()функцією

Dim resourceName() As String = ass.GetManifestResourceNames()

або

Dim sName As String 
    = ass.GetManifestResourceNames()
        .Single(Function(x) x.EndsWith("JavaScript.js"))

або

Dim sNameList 
    = ass.GetManifestResourceNames()
        .Where(Function(x As String) x.EndsWith(".js"))

-1

Прочитайте вбудований файл TXT на події завантаження форми.

Встановити змінні динамічно.

string f1 = "AppName.File1.Ext";
string f2 = "AppName.File2.Ext";
string f3 = "AppName.File3.Ext";

Зателефонуйте спробувати ловити.

try 
{
     IncludeText(f1,f2,f3); 
     /// Pass the Resources Dynamically 
     /// through the call stack.
}

catch (Exception Ex)
{
     MessageBox.Show(Ex.Message);  
     /// Error for if the Stream is Null.
}

Створіть порожнечу для IncludeText (), Visual Studio робить це для вас. Клацніть лампочку для автоматичного створення блоку коду.

Помістіть наступне всередині блоку згенерованого коду

Ресурс 1

var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream(file1))
using (StreamReader reader = new StreamReader(stream))
{
string result1 = reader.ReadToEnd();
richTextBox1.AppendText(result1 + Environment.NewLine + Environment.NewLine );
}

Ресурс 2

var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream(file2))
using (StreamReader reader = new StreamReader(stream))
{
string result2 = reader.ReadToEnd();
richTextBox1.AppendText(
result2 + Environment.NewLine + 
Environment.NewLine );
}

Ресурс 3

var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream(file3))

using (StreamReader reader = new StreamReader(stream))
{
    string result3 = reader.ReadToEnd();
    richTextBox1.AppendText(result3);
}

Якщо ви хочете надіслати повернуту змінну кудись ще, просто зателефонуйте на іншу функцію та ...

using (StreamReader reader = new StreamReader(stream))
{
    string result3 = reader.ReadToEnd();
    ///richTextBox1.AppendText(result3);
    string extVar = result3;

    /// another try catch here.

   try {

   SendVariableToLocation(extVar)
   {
         //// Put Code Here.
   }

       }

  catch (Exception ex)
  {
    Messagebox.Show(ex.Message);
  }

}

Досягнуто цього, це метод комбінування декількох файлів txt та зчитування їх вбудованих даних всередині одного розширеного текстового поля. що було моїм бажаним ефектом у цьому зразку Кодексу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.