Pergunta

Eu tenho um programa que eu preciso para ser executado em * nix e janelas. porque o programa toma caminhos de arquivos a partir de arquivos a questão é o que fazer sobre o \ vs questão /.

Meu pensamento atual é para colocar em um regex que converte a pessoa errada para o caminho certo dependendo de qual sistema em que estou. Isto terá o efeito de deixar qualquer tipo de trabalho em qualquer sistema. Afora o fato de que agora tenho dois problemas , alguém vê qualquer outros problemas?

(Outras soluções melhores são mais do que bem-vindos)

Edit:. A questão principal está ficando janelas caminhos para trabalhar em unix em vez do contrário

Foi útil?

Solução

A / é totalmente suportado no win32 também.

Veja também este questão relacionada

Outras dicas

O Windows irá geralmente aceitam qualquer \ ou /, então padronizar on / pode tornar o problema mais simples, desde que você tem o controle completo sobre os nomes dos arquivos.

Você já pensou em criar um "gerenciador de arquivos" classe que irá lidar com todos os problemas de arquivo pathing para você? Dessa forma, no aplicativo de correio, quando você está carregando um arquivo de dados, você pode chamar algo como isto.

LoadApplicationData(FileManager.GetDataFilePath)

Em seguida, o gerenciador de arquivos irá detectar o ambiente que ele está em e devolver a opção de caminho de arquivo adequado. Dessa forma, você também pode acomodar para Win32 vs. padrões Unix locatio (como Arquivos de Programas vs / usr ou qualquer outro) também.

Note que os caminhos Win32 são complexos quando você considera letras de unidade (sem analógicos em Unix) e dos garfos 'especiais (termo MacOS pré-X - da mesma forma não analógico em Unix, em geral, embora MacOS X tem-los - surpresa, surpresa ) que pode ser fornecida. Tenha cuidado.

Criar um analisador para a sua entrada para criar uma estrutura de árvore de nós que representam diretórios. Então você pode 'salvar' a pé da árvore e escrever o que quer que você quer delimitadores ou, opcionalmente, fazer coisas diferentes, como verificar se existe o diretório ou a gravar ficheiros de meta. Esta é realmente algo que eu apenas estou pensando agora seria útil para a minha própria aplicação: -)

Você não disse o idioma que você está usando, então eu vou assumir c / c ++ egoisticamente. impulsionar , se você estiver disposto a usá-lo, tem um sistema de arquivos biblioteca. Claro, se você estiver usando uma linguagem dinâmica, FS abstração bibliotecas provavelmente já existem lá também (por exemplo em Perl, File :: Spec é bastante standard).

Você não contou-nos que tipo de arquivos que são caminhos de leitura em partir. Vou assumir que eles são arquivos config. Nesse caso, há muitas maneiras, IMHO a resposta correta é a concepção de seu programa para evitar manipulação de caminhos, se possível. Eu postei uma resposta aqui:. https://stackoverflow.com/a/40980510/2345997 que é relevante

formas:

  1. Adicione uma opção de linha de comando que permite que um usuário para especificar o caminho em questão, em vez de lê-lo a partir de um arquivo de configuração.
  2. Adicione uma opção de linha de comando para que o usuário pode especificar um caminho base. Caminhos no arquivo de configuração será interpretado como localizado sob este caminho de base.
  3. Dividir o seu arquivo de configuração em três. Um arquivo terá a configuração de plataforma cruzada, um outro arquivo terá janelas única configuração e um arquivo final terá Linux única configuração. Em seguida, o usuário pode especificar o caminho correto para Windows e Linux. No windows o seu programa irá ler o arquivo de configuração multi-plataforma e as janelas única config. No Linux ele irá ler o arquivo multi-plataforma e o arquivo só config-Linux.
  4. Adicionar pré-processamento para a sua análise de arquivo de configuração. Isto irá permitir que você tenha um arquivo de configuração onde o usuário pode fazer o seu programa de ignorar algumas das linhas no arquivo, dependendo de qual sistema operacional o programa está sendo executado. Portanto, o usuário será capaz de especificar o caminho para o arquivo duas vezes. Uma vez para Linux, e uma vez para o Windows.
  5. Altere o projeto de modo que os arquivos são sempre localizado no mesmo diretório do executável -., Em seguida, o usuário só especifica os nomes dos arquivos no arquivo de configuração em vez de caminhos para arquivos
  6. Use uma função simples que muda "/" para "\". Então documento para o usuário que ele deve especificar caminhos como caminhos Linux e essa transformação será aplicada para as janelas.
  7. Crie o seu próprio caminho mini-idioma para isso e documentá-lo para o usuário. Por exemplo: "/" - especifica um separador de diretório, {raiz} - expande para a raiz do sistema de arquivos, {cwd} - expande para o diretório atual, {app} - expande-se para o caminho para o aplicativo etc ... Em seguida, a usuário pode especificar caminhos de arquivo como:. {raiz} /myfiles/bob.txt em ambas as plataformas
  8. Alguns caminhos irá funcionar em ambas as plataformas. Por exemplo: caminhos relativos como arquivos ../my / bill.txt. Restringir seu aplicativo para funcionar apenas com esses caminhos. Documentar essa limitação e como suas alças de aplicação caminhos para o usuário.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top