BOA NOITE. DUVIDA SOBRE FILE.COPY VB 2010
bao noite galera,,,
meu sistema pega uma foto e copia para um determinado diretório... até ai legal, porem se o usuário tentar gravar 2 arquivos com mesmo nome da problema, não gostaria de sobrepor o arquivo também..
vejo 2 soluções , a primeira seria que o próprio sistema gerasse um nome automático para cad arquivo que fosse gravado, a outra seria que o arquivo ficasse com o mesmo nome mas com um (1),(2),(3) assim por diante, na frente do arquivo como o próprio Windows faz
mas o problema e que não tenho ideia de como implementar nenhuma das 2 ideias!!
obrigado a todos
meu sistema pega uma foto e copia para um determinado diretório... até ai legal, porem se o usuário tentar gravar 2 arquivos com mesmo nome da problema, não gostaria de sobrepor o arquivo também..
vejo 2 soluções , a primeira seria que o próprio sistema gerasse um nome automático para cad arquivo que fosse gravado, a outra seria que o arquivo ficasse com o mesmo nome mas com um (1),(2),(3) assim por diante, na frente do arquivo como o próprio Windows faz
mas o problema e que não tenho ideia de como implementar nenhuma das 2 ideias!!
obrigado a todos
Você pode aproveitar a plataforma .Net e renomear os arquivos facilmente, usando um GUID. Esse procedimento é bastante utilizado na remessa de arquivos pela Web, até mesmo por manter o arquivo [Ô]quase anônimo[Ô].
...
Dim mNovoNomeDoArquivo As String = Guid.NewGuid.ToString()
...
Já para aplicações Desktop (WinForms ou WPF), aplicar um sufixo com um contador para cópias é o mais utilizado. Para esse fim, antes da cópia efetiva do arquivo, você deve verificar quantos arquivos existem com o mesmo nome daquele que se quer copiar. Se existir algum, o nome do arquivo de destino é então complementado com a quantidade existente, entre aspas, ou seja, mantém-se nome e extensão, mas complementa-se o nome com o contador. Uma rotina simples com base em um GetFiles resolve isso. Observe que você vai usar um FileInfo para manter os dados do arquivo de origem e um DirectoryInfo para manter as informações da pasta, pelo menos. Não esqueça do Imports System.IO.
...
Dim mNovoNomeDoArquivo As String = Guid.NewGuid.ToString()
...
Já para aplicações Desktop (WinForms ou WPF), aplicar um sufixo com um contador para cópias é o mais utilizado. Para esse fim, antes da cópia efetiva do arquivo, você deve verificar quantos arquivos existem com o mesmo nome daquele que se quer copiar. Se existir algum, o nome do arquivo de destino é então complementado com a quantidade existente, entre aspas, ou seja, mantém-se nome e extensão, mas complementa-se o nome com o contador. Uma rotina simples com base em um GetFiles resolve isso. Observe que você vai usar um FileInfo para manter os dados do arquivo de origem e um DirectoryInfo para manter as informações da pasta, pelo menos. Não esqueça do Imports System.IO.
obrigado amigo vc teria algum código exemplo para me auxiliar?
Bom dia.
Utilize o Try.
coloque uma variável publix (x)
x = 1
Try
Seu códico.
Catch Erro As Exception
[ô]Se der erro
Copia o arquivo com o nome + (x).jpg
x += 1
End Try
Assim quando der erro ele coloca o (1) no nome do arquivo, se der erro denovo ele coloca (2).
Antes disso verifica é claro se existe o diretório a ser copiado, e coloca uma mensagem que o arquivo já existe e se ainda quer copiar.
Utilize o Try.
coloque uma variável publix (x)
x = 1
Try
Seu códico.
Catch Erro As Exception
[ô]Se der erro
Copia o arquivo com o nome + (x).jpg
x += 1
End Try
Assim quando der erro ele coloca o (1) no nome do arquivo, se der erro denovo ele coloca (2).
Antes disso verifica é claro se existe o diretório a ser copiado, e coloca uma mensagem que o arquivo já existe e se ainda quer copiar.
A idéia do professor de usar um GUID é uma boa alternativa. Eu pessoalmente, prefiro usar o método GetTempFileName da classe Path:
Dim caminhoArquivo = Path.GetTempFileName()
esse esquema do contador eu já tentei, ele da certo na primeira vez que vc faz as copias, agora quando você fecha o formulário e abre dnv ele da problema, pois o contador começa do 0 dnv
vc pode usar tbm um metodo que usam para uploads de fotos com o mesmo nome, em web. colocando os nome das fotos em Hash, ex: MD5
Tópico encerrado , respostas não são mais permitidas