Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

a3deluxe

If Not Directory Exists

Mensagens Recomendadas

a3deluxe

Boas,

Queria adicionar a este código, se o If Not Directory.Exists, não fazer nada.

porque o directory de destino é uma pendrive, se a Pendrive não existir ele dá erro.

queria que se a Pendrive não existir ele não desse erro e continua-se.

//
If Directory.Exists(BackupInPath) Then
		If Not Directory.Exists(BackupOutPath2) Then Directory.CreateDirectory(BackupOutPath2)


		For Each F As String In Directory.GetFiles(BackupInPath)
			File.Copy(F, Path.GetFullPath(BackupOutPath2) & "\" & Path.GetFileName(F), True)

		Next
	End If		

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cdaniel.marques

Experimenta assim:

If Directory.Exists(BackupInPath) Then
   If Directory.Exists("f:\") Then 'Verfica se a Drive F Existe, só executa código se existir
	 If Not Directory.Exists(BackupOutPath2) Then Directory.CreateDirectory(BackupOutPath2)

	 For Each F As String In Directory.GetFiles(BackupInPath)
		  File.Copy(F, Path.GetFullPath(BackupOutPath2) & "\" & Path.GetFileName(F), True)
	 Next
 End If
End If

Editado por cdaniel.marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

mais uma vez obrigado pela ajuda cdaniel.marques

funcionou!

É possivel de se fazer, quando coloca a pendrive ele por exemplo atribui a letra G,

ele mudar para a letra F?

isto porque nem sempre ele atribui a mesma letra , neste caso a letra F.

abracos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cdaniel.marques

Não sei se é a melhor maneira da fazer :confused: , mas deixo a sugestão:

Criar uma array com a Slot's mais provaveis e percorrer com um ciclo For Each

' Array Drives
Dim letras() As String = {"f:\", "g:\", "h:\", "i:\"}


If Directory.Exists(BackupInPath) Then
  For Each drive As String In letras  'Percorre as letras do array num ciclo For Each
  If Directory.Exists(drive) Then 'Verfica se a Drive F Existe, só executa código se existir
	 If Not Directory.Exists(BackupOutPath2) Then Directory.CreateDirectory(BackupOutPath2)

	 For Each F As String In Directory.GetFiles(BackupInPath)
		File.Copy(F, Path.GetFullPath(BackupOutPath2) & "\" & Path.GetFileName(F), True)
	 Next
  End If
  Next
End If

Editado por cdaniel.marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tiago Simões Marques

Sugestão: Porque é que não fazes um dialog para quando o utilizador for fazer o backup seleccionar a pen drive, e se a estrutura de backup não existir ele criar, porque ser tiveres varias pen's no mesmo pc vai-te dar problemas.

Espero que ajude,

Cumprimentos,


Tiago Simões Marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

vou tentar com a solução do cdaniel.marques

Quanto a fazes um dialog, não dá porque o programa em questão arranca com o windows e faz a copia de ficheiros para a pendrive automaticamente.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Ou então colocas um ficheiro identificador na raiz da pendrive e a aplicação procura as várias drives existentes e usa a que encontrar esse ficheiro.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Agora não tenho aqui o VB.NET para testar, mas basicamente depois de "If Directory.Exists(drive) Then" podes ter uma linha do tipo:

If File.Exists(String.Format("{0}backup.ini", drive)) then
' ...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tiago Simões Marques

Sugestão: Fazes um ficheiro txt e colocas na pen.

Depois com o código que já tens fazes um if para cada ficheiro:

If File.Exists("H:\Validador.txt") Then
ElseIf File.Exists("G:\Validador.txt") then
End If

Espero que me esteja a fazer entender


Tiago Simões Marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

Testei com este código para ver o resultado.

//
' Array Drives
Dim letras() As String = {"f:\", "g:\", "h:\", "i:\"}


If Directory.Exists(BackupInPath) Then
  For Each drive As String In letras  'Percorre as letras do array num ciclo For Each
	  If Directory.Exists(drive) Then 'Verfica se a Drive F Existe, só executa código se existir
			 If Not Directory.Exists(BackupOutPath2) Then Directory.CreateDirectory(BackupOutPath2)

			 For Each F As String In Directory.GetFiles(BackupInPath)
					File.Copy(F, Path.GetFullPath(BackupOutPath2) & "\" & Path.GetFileName(F), True)
			 Next
	  End If
  Next
End If

se a drive F existir, funciona bem

depois mudei a letra da drive de F para G e já deu este erro.

//
If Not Directory.Exists(BackupOutPath2) Then Directory.CreateDirectory(BackupOutPath2)

não encontrou a drive G

dentro da pen existe um ficheiro mas não tem extensao,

vou utilizar o proprio ficheiro que é copiado.

//    
If File.Exists("H:\filebackup") Then
ElseIf File.Exists("G:\filebackup") then
End If

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tiago Simões Marques

Já viste o valor que esta a passar na variavel: BackupOutPath2

Podes informar qual é?


Tiago Simões Marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

qual é o valor?

a variavel é esta

//	
Public BackupInPath As String = "J:\Data"   
Public BackupOutPath2 As String = "d:\Data"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cdaniel.marques

qual é o valor?

//	
Public BackupInPath As String = "J:\Data"  
Public BackupOutPath2 As String = "d:\Data"

A que se refere a variavel BackupInPath (Drive J)?

Uma pen, um disco fisico, uma pen que tu não sabes que drive vai usar?

O mesmo para BackupOutPath2 (Drive D).

É um disco sempre com a mesma letra, uma pen com várias letras possiveis?

Editado por cdaniel.marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tiago Simões Marques

Public BackupInPath As String = "Data"
Public BackupOutPath2 As String = "Data"

Depois quando tiver a fazer o ciclo tens que colocar a letra & "\"

File.Copy(F, Path.GetFullPath(Letra & "\" & BackupOutPath2) & "\" & Path.GetFileName(F), True)

Editado por Tiago Simões Marques

Tiago Simões Marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

Sim o Backupinpath e sempre a mesma (drive J)

a variavel BackupOupath2 e varia, por ser penusb.

qual a melhor maneira de fazer?

cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tiago Simões Marques

Public BackupInPath As String = "J:\Data"
Public BackupOutPath2 As String

No ciclo colocas

BackupOutPath2 = Letra & "\" & "Data"


Tiago Simões Marques

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

Tiago Simões Marques

onde coloco o

//

BackupOutPath2 = Letra & "\" & "Data"  

e esta variael fica assim:

//

Public BackupOutPath2 As String

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Boas,

isso já está grande confusão.

Fiz um exemplo completo, vê se ajuda.

O que este código faz é passar por todas as drives existentes, e caso encontre a pasta definida para destino de backups (ex:F:\Backups), copia os ficheiros da pasta definida como origem

' Indicar a pasta que se pretende fazer segurança (origem)
Dim caminhoOrigem As String = "C:\Dados"
' Indicar a pasta que tem de existir na drive onde vai colocar os backups
Dim pastaDestino As String = "Backups"

' Se o caminho origem existir
If Directory.Exists(caminhoOrigem) Then
' Passar em todas as drives disponíveis
For Each drive As DriveInfo In DriveInfo.GetDrives()
	' Verificar se existe na drive atual a pasta para guardar as seguranças (ex: D:\Backups)
	If Directory.Exists(String.Format("{0}{1}", drive.RootDirectory, pastaDestino)) Then

		' Passa por todos os ficheiros na pasta de origem
		For Each ficheiro As String In Directory.GetFiles(caminhoOrigem)
			' Copia da pasta origem para a pasta destino
			File.Copy(ficheiro, String.Format("{0}{1}\{2}", drive.RootDirectory, pastaDestino, Path.GetFileName(ficheiro)))
		Next

		' Como já encontrou a drive destino, sai do ciclo de drives
		Exit For
	End If
Next
End If

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

Há alguma maneira de adaptar esse código a drive (d:\) e ao ficheiro (Backup) desta instrução:

//  Shell("c:\program Files\TrueCrypt\truecrypt.exe /v d:\Backup /lq /a /p ""1234"" /b /q
/s")	    

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

A instrução por sim não verifica, mas podes por um if antes de executar. Algo assim:

If File.Exists("c:\program Files\TrueCrypt\truecrypt.exe") And Directory.Exists("d:\Backup") Then
Shell("c:\program Files\TrueCrypt\truecrypt.exe /v d:\Backup /lq /a /p ""1234"" /b /q")
End If

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
a3deluxe

Obrigado nelsonr

Agora queria que ele procurar nas drives

D:, G:, F: , H:, ...

se o ficheiro Backup existe.

era para procurar na PenUsb se o ficheiro Backup existe.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Vê se ajuda:

' Verificar se o executavel existe
If File.Exists("c:\program Files\TrueCrypt\truecrypt.exe") Then
' Passar em todas as drives disponíveis
For Each drive As DriveInfo In DriveInfo.GetDrives()
	' Verificar se existe na drive atual a pasta para guardar as seguranças (ex: D:\Backups)
	If Directory.Exists(String.Format("{0}Backup", drive.Name)) Then
		' Executar comando de backup
		Shell("c:\program Files\TrueCrypt\truecrypt.exe /v " + drive.Name + "Backup /lq /a /p ""1234"" /b /q")
		' Sair do ciclo das drives
		Exit For
	End If
Next
End If

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.