Pergunta

Me deparei com a Biblioteca AC para abrir arquivos com um nome de arquivo Unicode. Antes de abrir o arquivo, ele primeiro converte o nome do arquivo em um caminho, precendendo "? ". Existe algum motivo para fazer isso além de aumentar o número máximo de caracteres permitidos no caminho, por Este artigo do MSDN?

Parece que esses caminhos "? " Exigem as versões Unicode da API do Windows e da biblioteca padrão.

Foi útil?

Solução

Sim, é apenas para esse fim. No entanto, você provavelmente verá problemas de compatibilidade se decidir criar caminhos sobre o comprimento max_path. Por exemplo, o shell do Explorer e o prompt de comando (pelo menos no XP, não sei sobre o Vista) não conseguem lidar com caminhos por esse comprimento e retornarão erros.

Outras dicas

O melhor uso para esse método provavelmente não é criar novos arquivos, mas gerenciar arquivos existentes, que alguém pode ter criado.

Eu gerenciei um servidor de arquivos que rotineiramente receberia arquivos com path_length > MAX_PATH. Veja bem, os usuários viram os arquivos como H:\myfile.txt, mas no servidor era realmente H:\users\username\myfile.txt. Então, se um usuário criou um arquivo com exatamente MAX_PATH caracteres, no servidor, era MAX_PATH+len("users\username").

(Criar um arquivo com caracteres max_path não é tão incomum, pois quando você salva uma página da web no Internet Explorer, ele usa o título da página como o nome do arquivo, que pode demorar muito para algumas páginas).

Além disso, compartilhando uma unidade (via rede ou USB) com uma máquina Mac ou Linux, você pode se encontrar com arquivos com nomes como Con, PRN ou LPT1. E, novamente, o prefixo permite que você e seus scripts lidam com esses arquivos.

Eu acho que a primeira coisa a notar é que "? " Não faz do caminho um caminho UNC. Você foi mais preciso na segunda vez quando o chamou de UNC-estilo caminho. Mas, mesmo assim, a semelhança só vem de ter duas barras de barriga no início. Realmente não tem nada a ver com a UNC. Isso é apoiado pelo fato de você ter que usar ainda mais Personagens para obter um caminho UNC com o prefixo "? ".

Eu acho que você tem todo o motivo para usar esse prefixo. Ele levanta o limite máximo de comprimento, conforme descrito no artigo que você citou. E se aplica apenas a caminhos unicode; Os caminhos não unicódicos não podem evitar o limite usando esse prefixo.

Uma coisa a observar é que o prefixo não é permitido para caminhos relativos, apenas para os absolutos. Você pode verificar novamente se o seu C Library honra essa restrição.

Além de permitir caminhos mais longos, o prefixo "? " Também permite usar arquivos e nomes de diretórios como "Con" e "aux". Normalmente, o Windows interpreta aqueles como dispositivos DOS antiquados.

Escrevo o código do Windows desde 1995 e, embora eu esteja ciente desse prefixo, nunca encontrei nenhum motivo para usá -lo. Aumentando o comprimento do caminho além MAX_PATH Parece ser a única razão para isso, e nem eu nem nenhum dos clientes dos meus programas o fizemos, a meu conhecimento.

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