Pergunta

Eu estou trabalhando no Visual Studio 2005 e adicionou um arquivo de texto que precisa ser analisado pelo botão direito do mouse o projeto no explorador solução e add -> novo item. Isso coloca o arquivo .txt para a pasta projeto. O arquivo de depuração .exe está na pasta / bin / debug.

Como faço para apontar corretamente para o arquivo txt a partir do código usando caminhos relativos que irá adequadamente resolver sendo duas pastas para trás, ao mesmo tempo, resolvendo ser na mesma pasta depois que a solução é publicado?

Foi útil?

Solução

Confira o Aplicação Classe . Tem vários membros que podem ser usados ??para localizar arquivos, etc. relativos à aplicação uma vez que foi instalado.

Por exemplo, Application.ExecutablePath diz-lhe onde o arquivo EXE em execução está localizado; Você poderia, então, usar um caminho relativo para localizar o arquivo, por exemplo, .. \ .. \ FileToBeParsed.txt. No entanto, isso pressupõe que os arquivos são implantados na mesma estrutura de pastas como a estrutura de pastas do projeto, que não é geralmente o caso.

Considere imóveis como CommonAppDataPath e LocalUserAppDataPath para localizar arquivos de aplicativos relacionadas, uma vez que um projeto foi implantado.

Outras dicas

Se eu entendi sua pergunta: Selecione o arquivo no "Solution Explorer". Em Propriedades -> Copiar para Diretório de Saída, selecione "Copiar Sempre" ou "Copy if newer". Para ação de compilação, selecione "Conteúdo". Isso irá copiar o arquivo para a pasta / bin / debug em construção. Você deve ser capaz de fazer referência a ela a partir da raiz do projeto a partir de então.

Uma alternativa para localizar o arquivo no disco seria incluir o arquivo diretamente na compilado assembly como um recurso incorporado. Para fazer isso, clique com o botão direito no arquivo e escolha "Embedded Resource", como a ação de compilação. Você pode recuperar o arquivo como um fluxo de bytes:

Assembly thisAssembly = Assembly.GetExecutingAssembly();
Stream stream = thisAssembly.GetManifestResourceStream("Namespace.Folder.Filename.Ext");
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);

Mais informações sobre recursos incorporados podem ser encontrados aqui e aqui .

Se você está construindo uma aplicação para o seu próprio uso, a sugestão de David Krep é melhor: basta copiar o arquivo para o diretório de saída. Se você está construindo um conjunto que vai ser reutilizados ou distribuído, a opção de recurso incorporado é preferível porque ele vai empacotar tudo em um único .dll.

Gostaria de acrescentar uma etapa de pós compilação que copia o arquivo txt na pasta de saída da configuração ativa:

xcopy "$(ProjectDir)*.txt" "$(OutDir)"

Existem algumas macros definidos como "$(ConfigurationName)", $(ProjectDir)

Vá para Propriedades do projeto -> Propriedades de configuração -> Depuração

Set "diretório de trabalho" para $ (TargetDir)

Em seguida, você pode fazer referência corretamente seu arquivo usando um caminho relativo em seu código (por exemplo, ".... \ foo.xml")

A solução Application.ExecutablePath não funcionam para UnitTests. O caminho da vstesthost.exe será devolvido

System.Reflection.Assembly.GetExecutingAssembly (). Location vai funcionar, mas dá o caminho com o assemblyname incluído.

Então, isso funciona:
System.Reflection.Assembly.GetExecutingAssembly().Location + "\..\" + "fileToRead.txt"

Mas, assim:

fileToRead.txt

Funciona também. Parece diretório de trabalho é o anuário de assembly em execução por padrão.

Você pode adicionar um evento pós-compilação para copiar o arquivo .txt para a pasta de saída de compilação. Em seguida, seu código pode assumir que o arquivo está na mesma pasta que o executável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top