Pergunta

Bem, se eu quiser armazenar dados para uma máquina de ampla aplicação eu só uso

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

E se eu quiser armazenar dados por usuário eu uso

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

Mas o que se eu quiser salvar dados por instância do aplicativo? eu poderia usar a pasta que a aplicação é armazenado em mas os "arquivos de programa" pastas não são feitas para este tipo de armazenamento de dados se eu entendi direito ...

Edit:. Para esclarecer o que eu quis dizer se eu instalar o aplicativo 2 vezes em pastas differnet ... não instâncias em execução desculpe

Foi útil?

Solução

Eu não sei de qualquer outro aplicativo que faz isso.

Se eu executar duas cópias do Visual Studio, digamos, eu espero que as configurações da última instância fechada para ser os únicos persistiu.

Se você atribuir uma instância uma identificação única (GUID) como você reutilizar esse valor na próxima vez que você executar o aplicativo? Ou você quer para obter um novo conjunto de valores cada vez que você executar o aplicativo?

Se você quiser reutilização, você pode criar sub-diretórios numerados (1, 2, 3, 4 etc.) e cada vez que você executar a gravação aplicativo um arquivo de bloqueio para esse diretório. Em seguida, verificar a presença do arquivo de bloqueio e incrementar o número até encontrar uma pasta desbloqueado.

Atualizar

À luz do comentário adicionado - por que não obter o caminho do executável e criar uma pasta em que

Se o usuário não tem direitos para essa pasta você teria que criar algum tipo de mapeamento entre a localização e um GUID (digamos) que você então anexado às configurações de aplicativos e caminho do usuário configurações.

Outras dicas

Por que você não armazenar os dados na Path.GetTempPath diretório temporário. Você pode usar uma subpasta para a sua aplicação e outra subpasta (talvez um Guid como o nome seria útil) para a instância. Gostaria de implementar alguma classe gerente que implementa IDisposable para permitir a remoção do caminho da instância quando os fecha aplicação para baixo.

Crie uma pasta instância por força da pasta de dados do usuário ou a pasta de dados da máquina, se você precisar fazer isso. A sua aplicação poderia remover quaisquer dados queria-ONU sobre a saída. Embora @ ChrisF está certo sobre mais usual comportamento.

Uma possibilidade seria gerar uma identificação única a primeira vez que o programa é executado e armazená-lo em algum lugar específico para o programa (talvez um arquivo de configuração local).

Então, quando você quiser acessar os arquivos para essa cópia específica do aplicativo, basta usar

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "\" + uniqueid);

ou

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top