Access Violation

terça-feira, junho 06, 2006

Links...
Aqueles que estão acostumados com SOs Unix Like certamente já conhecem este conceito, mas poucos usuários do Windows sabem que o NTFS (desde o Windows NT 4.0), suporta o conceito de hardlinks, que nada mais são que várias entradas de diretório que apontam para o mesmo arquivo (Note que este conceito aplica-se apenas a arquivos).

Utilizando-se este recurso é possível fazer com que um arquivo possa "estar" em dois (ou mais) diretórios ao mesmo tempo :).

Vejam o exemplo:
  • Arquivo: c:\temp\teste.txt
  • Hardlink: c:\dados\teste.txt
Neste exemplo é possível com que dois arquivos aparentemente distintos representem o mesmo arquivo.

Você pode estar se perguntando: "E porque eu usaría isto?". Para simplificar o gerenciamento de arquivos.

Por exemplo, em alguns projetos meus, necessito que um arquivo (digamos arquivo.txt) se encontre em um diretório específico; por outro lado este mesmo arquivo deve ser incluído no programa de setup destes projetos que por sua vez, normalmente, tem seus arquivos armazenados em um diretório chamado setup e, por motivos de organização, este arquivo fica neste diretório, assim acabo com a seguinte configuração:

c:\meus projetos\nome projeto\src\arquivo.txt
c:\meus projetos\nome projeto\src\setup\arquivo.txt

Agora eu tenho que decidir como gerenciar esta questão:
  1. Mantenho o arquivo nos dois diretórios e corro o risco de ter duas versões diferentes do mesmo (e o que é pior, testar o projeto usando um arquivo e liberar um setup que usa o outro - não testado)

  2. Manter apenas uma cópia do arquivo e ficar movendo a mesma de um diretório para o outro na medida do nescessário.
Usando hard links é possível manter uma única cópia do arquivo (provavelmente no diretório setup) e criar um hard link para este arquivo no direrório src resolvendo o problema (evitando trabalho desnecessário e/ou problemas por utilizar uma versáo incorreta do arquivo).

O melhor de tudo é que é possível mover qualquer uma das referências e tudo continuará a funcionar!

A questão que surge então é "como fazer para criar um hardlink?". A resposta rápida é: nas versões atuais o Windows não disponibiliza uma forma simples para se fazer isto. Mas como quase tudo no windows pode ser extendido (e o Shell não é diferente) já desenvolveram (pelo menos) uma Shell Extension.

Adriano


[+/-] mostrar/esconder este post