2013-08-07 2 views
9

Я создал полный проект, который отлично работает. Моя проблема связана с проектом установки. Когда я использую его на другом компьютере, текстовый файл не может быть найден, даже если он находится внутри папки ресурсов во время развертывания!Чтение встроенного текстового файла

Как я могу гарантировать, что моя программа найдет эти текстовые файлы после установки программного обеспечения на другом компьютере!

Я искал это решение, но напрасно. Пожалуйста, помогите мне разобраться. Если я смогу получить полный код, который сделает это, я буду очень счастлив!

+2

Просьба представить более подробную информацию. Какую IDE вы используете? Что это за проект? Как вы включили текстовый файл в папку ресурса? Какие варианты сборки вы установили в текстовом файле? –

+0

Im используя C#. его проект, в котором так много текстовых файлов, и способ, которым я читаю эти файлы, заключается в том, что я открываю файл и читаю только зелье этого файла, который я хочу. это означает, что я иногда пропускаю строки внутри этого файла в зависимости от того, что я хочу. Я включил эти файлы (69 текстовых файлов) в каталог ресурсов. поэтому после развертывания я хочу, чтобы установить установку на другом компьютере, чтобы моя программа могла читать эти файлы! im действительно борется! Я хочу полный код для этого. –

+0

Вы пишете на C#, но сообщаете нам, какую IDE вы используете (визуальная студия будет моей первой ставкой, если не monoDevelop) поможет нам рассказать вам, как настроить ваши действия по сборке. –

ответ

2

Предполагая, что вы имеете в виду, что у вас есть файл в проекте, который вы установили в качестве EmbeddedResource, вы хотите

using (var stream = Assembly.GetExecutingAssembly() 
    .GetManifestResourceStream(path)) 
{ 
    ... 
} 

где path должно быть имя сборки с последующим относительным путем к файлу в иерархия папок проекта. Используемый разделительный символ - период ..

Так что если у вас есть сборка под названием MyCompany.MyProject, а затем в этом проекте у вас есть папка Test, содержащую Image.jpg, вы будете использовать путь MyCompany.MyProject.Test.Image.jpg получить Stream для него.

+0

большое спасибо. Это помогло мне. – Vikram

22

FIrst устанавливает действие сборки текстового файла на «EmbeddedResource».

Затем прочитать файл в вашем коде:

var assembly = Assembly.GetExecutingAssembly(); 
var resourceName = "AssemblyName.MyFile.txt"; 

using (Stream stream = assembly.GetManifestResourceStream(resourceName)) 
{ 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     string result = reader.ReadToEnd(); 
    } 
} 

Если вы не можете выяснить имя внедренного ресурса сделать это, чтобы найти имена, и это должно быть очевидно, какой файл является:

assembly.GetManifestResourceNames(); 

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

+0

и whats AssemblyName в этом случае? внутри "AssemblyName.MyFile.txt". –

+1

ключом является создание действия текстового файла на «EmbeddedResource». Благодарю. –

+0

Итак, @MoloraneMothusi, это принятый ответ? Если да, отметьте это как таковое. :) –

1

создать эту функцию, чтобы прочитать, что внедренный текст файл ресурсов у вас есть:

public string GetFromResources(string resourceName) 
{ 
    Assembly assem = this.GetType().Assembly; 

    using (Stream stream = assem.GetManifestResourceStream(resourceName)) 
    { 
     using (var reader = new StreamReader(stream)) 
     { 
      return reader.ReadToEnd(); 
     } 

    } 
} 
+0

Как это не только копия того, что было написано за 7 минут? –

+0

даже не видел вашего сообщения timothy (я думаю, вы сказали это из-за своего сообщения), я создаю метод для OP, чтобы получить любой текстовый файл в ресурсах, поскольку это не копия вашего, я сожалею, если я исписал вас или кто-то еще, это не мое желание сделать это, это не было копией. – terrybozzio

+1

Не беспокойтесь об этом. Ничего плохого, если это не было преднамеренным. –

Смежные вопросы