Встраивание файла в приложение C # .NET, а затем чтение его медленно? - PullRequest
0 голосов
/ 06 января 2010

У меня довольно большой ресурс (2 МБ), который я встраиваю в свое приложение C # ... Я хочу знать, прочитать его в память, а затем записать на диск, чтобы использовать его для дальнейшей обработки?

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

Любой пример кода поможет мне при запуске.

Ответы [ 3 ]

3 голосов
/ 06 января 2010

Вам необходимо выполнить потоковую передачу ресурса с диска, поскольку .NET Framework, скорее всего, не будет загружать ваши ресурсы, пока вы не получите к ним доступ (я не уверен на 100%, но я совершенно уверен)

Во время потоковой передачи содержимого необходимо также записать его обратно на диск.

Помните, что это создаст имя файла как "YourConsoleBuildName.ResourceName.Extenstion"

Например, если цель вашего проекта называется «ConsoleApplication1», а имя вашего ресурса - «My2MBLarge.Dll», то ваш файл будет создан как «ConsoleApplication1.My2MBLarge.Dll» - конечно, вы можете изменить его как вы видите заполнение подходит.

    private static void WriteResources()
    {
        Assembly assembly = Assembly.GetExecutingAssembly();
        String[] resources = assembly.GetManifestResourceNames();
        foreach (String name in resources)
        {
            if (!File.Exists(name))
            {
                using (Stream input = assembly.GetManifestResourceStream(name))
                {
                    using (FileStream output = new FileStream(Path.Combine(Path.GetTempPath(), name), FileMode.Create))
                    {
                        const int size = 4096;
                        byte[] bytes = new byte[size];

                        int numBytes;
                        while ((numBytes = input.Read(bytes, 0, size)) > 0)
                            output.Write(bytes, 0, numBytes);
                    }
                }
            }
        }
    }
2 голосов
/ 06 января 2010

Попробуйте следующее:

Assembly Asm = Assembly.GetExecutingAssembly();
var stream = Asm.GetManifestResourceStream(Asm.GetName().Name + ".Resources.YourResourceFile.txt");
var sr = new StreamReader(stream);
File.WriteAllText(@"c:\temp\thefile.txt", sr.ReadToEnd);

Код предполагает, что ваш встроенный файл называется YourResourceFile.txt и находится в папке вашего проекта с именем Resources. И, конечно, папка c:\temp\ должна существовать и быть доступной для записи.

Надеюсь, это поможет.

/ Клаус

2 голосов
/ 06 января 2010
var assembly = Assembly.GetExecutingAssembly();
using (var stream = assembly.GetManifestResourceStream("namespace.resource.txt"))
{
    byte[] buffer = new byte[stream.Length];    
    stream.Read(buffer, 0, buffer.Length);
    File.WriteAllBytes("resource.txt", buffer);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...