Como leio um recurso incorporado (arquivo de texto) usando StreamReader
e o retorno como uma string? Meu script atual usa um formulário e caixa de texto do Windows que permite ao usuário localizar e substituir texto em um arquivo de texto que não está incorporado.
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();
}
fonte
Environment.SpecialFolder
para obter a pasta da área de trabalho. Você precisa ter em mente que o recurso será espaçado por nomes com base em seu caminho no projeto, portanto, seu nome pode não ser justofile1.txt
.GetManifestResourceStream
precisa do caminho como @adrian indica. Se ajudar alguém, esse caminho é como mostra o que @SimpleCoder no exemplo:MyNamespace.Filename.Ext
. Eu já havia tentado anteriormente,MyNamespace.Resources.Filename.Ext
mas isso resulta em um nulo.using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Você pode adicionar um arquivo como um recurso usando dois métodos separados.
O código C # necessário para acessar o arquivo é diferente , dependendo do método usado para adicionar o arquivo em primeiro lugar.
Método 1: Adicionar arquivo existente, defina a propriedade como
Embedded Resource
Adicione o arquivo ao seu projeto e defina o tipo como
Embedded Resource
.NOTA: Se você adicionar o arquivo usando esse método, poderá usá
GetManifestResourceStream
-lo para acessá-lo (consulte a resposta em @dtb ).Método 2: Adicionar arquivo ao
Resources.resx
Abra o
Resources.resx
arquivo, use a caixa suspensa para adicionar o arquivo, definaAccess Modifier
comopublic
.NOTA: Se você adicionar o arquivo usando este método, poderá usá
Properties.Resources
-lo para acessá-lo (consulte a resposta do @Night Walker ).fonte
Resource
não faz nada que permita ler o item como um recurso? você tem que usarEmbeddedResource
ou adicionar a umResources.resx
arquivo?Properties.Resources.Your_resource_name
escrever este:Properties.Resources.ResourceManager.GetObject("Your_resource_name")
.Basicamente, você usa
System.Reflection
para obter uma referência à montagem atual. Então você usaGetManifestResourceStream()
.Exemplo, na página que publiquei:
Nota : é necessário adicionar
using System.Reflection;
para que isso funcionefonte
namespace
como parte do nome do recursovar auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Este método pode ser muito útil quando você deseja aprender o nome exato do recurso. (Tomado da questão stackoverflow.com/questions/27757/... )No Visual Studio, você pode incorporar diretamente o acesso a um recurso de arquivo através da guia Recursos das propriedades do projeto ("Análise" neste exemplo).
O arquivo resultante pode ser acessado como uma matriz de bytes por
Se você precisar dele como um fluxo, então (em https://stackoverflow.com/a/4736185/432976 )
fonte
Quando você adicionou o arquivo aos recursos, deve selecionar seus Modificadores de Acesso como públicos, para fazer algo como o seguinte.
CLIST01 é o nome do arquivo incorporado.
Na verdade, você pode acessar o resources.Designer.cs e ver qual é o nome do getter.
fonte
Action
comoIncorporated ressource
, não tenho nenhumAccess Modifiers
campo no painel de propriedades. Além disso, não tenho umaPropersites.Resources
classe, recebo umThe name 'Properties' does not exist in the current context
erro ao compilar seu código.Resources.resx
, veja minha resposta sobre os diferentes métodos para incorporar arquivos em um projeto.adicionando, por exemplo, o menu Projeto Testfile.sql -> Propriedades -> Recursos -> Adicionar arquivo existente
fonte
Eu sei que é um tópico antigo, mas é isso que funcionou para mim:
leia o texto assim:
O texto que eu adicionei aos recursos: 'SomeText.txt'
fonte
Você também pode usar esta versão simplificada da resposta da @ dtb:
fonte
Algo que aprendi agora é que seu arquivo não pode ter um "." (ponto) no nome do arquivo.
Templates.plainEmailBodyTemplate-en.txt -> Funciona !!!
Templates.plainEmailBodyTemplate.en.txt -> não funciona via GetManifestResourceStream ()
Provavelmente porque o framework fica confuso sobre namespaces vs nome do arquivo ...
fonte
Por todos os seus poderes combinados, eu uso essa classe auxiliar para ler recursos de qualquer assembly e qualquer namespace de maneira genérica.
fonte
Eu li um arquivo de texto de recurso incorporado:
Amostra:
fonte
Eu sei que isso é antigo, mas eu só queria destacar o NETMF (.Net MicroFramework), você pode fazer isso facilmente:
Como o NETMF não possui
GetManifestResourceStream
fonte
Depois de ler todas as soluções postadas aqui. Foi assim que eu resolvi:
fonte
A resposta é bastante simples, basta fazer isso se você adicionou o arquivo diretamente do resources.resx.
Com essa linha de código, o texto do arquivo é lido diretamente do arquivo e colocado na variável string.
fonte
Fiquei aborrecido por você sempre incluir o espaço para nome e a pasta na string. Eu queria simplificar o acesso aos recursos incorporados. Foi por isso que escrevi esta pequena turma. Sinta-se livre para usar e melhorar!
Uso:
Classe:
fonte
Alguns tipos de projeto do VS .NET não geram automaticamente um arquivo .NET (.resx). As etapas a seguir adicionam um arquivo de recursos ao seu projeto:
Resources
.Agora você pode adicionar um arquivo de texto como um recurso, por exemplo, um arquivo xml:
Resources
possui uma propriedade do tipostring
que é nomeada após o arquivo incluído. Se o nome do arquivo é, por exemplo RibbonManifest.xml, em seguida, a propriedade deve ter o nomeRibbonManifest
. Você encontra o nome exato no arquivo de código Resources.Designer.cs.string xml = Resources.RibbonManifest
. A forma geral éResourceFileName.IncludedTextFileName
. Não use,ResourceManager.GetString
pois a função get da propriedade string já fez isso.fonte
fonte
Esta é uma classe que você pode achar muito conveniente para ler arquivos de recursos incorporados do atual
Assembly
:fonte
Para todas as pessoas que desejam rapidamente o texto de um arquivo codificado em winforms;
Resources.<name of resource>.toString();
para ler o arquivo.Eu não recomendaria isso como prática recomendada ou algo assim, mas funciona rapidamente e faz o que precisa.
fonte
Para usuários que estão usando o VB.Net
Onde
MyApplicationName
está o namespace do meu aplicativo. Não é o nome do assembly. Este nome é definido nas propriedades do projeto (guia Aplicativo).Se você não encontrar o nome correto do recurso, poderá usar a
GetManifestResourceNames()
funçãoou
ou
fonte
Leia o arquivo TXT incorporado no evento de carregamento de formulário.
Defina as variáveis dinamicamente.
Chame uma tentativa de captura.
Criar void para IncludeText (), Visual Studio Faz isso por você. Clique na lâmpada para gerar automaticamente o CodeBlock.
Coloque o seguinte dentro do bloco de código gerado
Recurso 1
Recurso 2
Recurso 3
Se você deseja enviar a variável retornada para outro lugar, basta chamar outra função e ...
O que isso foi alcançado foi um método para combinar vários arquivos txt e ler seus dados incorporados, dentro de uma única caixa de rich text. qual foi o efeito desejado com esse exemplo de código.
fonte