BOA NOITE. DUVIDA SOBRE FILE.COPY VB 2010

MEGAMELO2 27/08/2013 22:30:04
#428211
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
PROFESSOR 27/08/2013 22:59:41
#428213
Resposta escolhida
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.
MEGAMELO2 28/08/2013 01:36:57
#428220
obrigado amigo vc teria algum código exemplo para me auxiliar?
JOEYRFS 28/08/2013 09:34:48
#428227
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.
KERPLUNK 28/08/2013 10:02:22
#428230
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()
MEGAMELO2 28/08/2013 14:59:56
#428252
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
FELLIPEASSIS 28/08/2013 15:37:35
#428255
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