Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rogério Orlando

como copiar um pasta inteira

Recommended Posts

Boa noite amigos.

 

preciso fazer o Backup de todos os arquivos de uma pasta que esta em outro computador, porém não sei se existe alguma função ou código para fazer isto de uma só vez.

 

Já consegui copiar arquivos, individualmente, de outro PC através do filecopy, entretanto não conheço nenhuma rotina para copiar todos.

 

Alguém teria alguma idéia que pudesse me ajudar? (VB 6.0)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta isso:

 

Option Explicit

Private Declare Function SHFileOperation _
	Lib "shell32.dll" _
		Alias "SHFileOperationA" _
			(lpFileOp As SHFILEOPSTRUCT) As Long

Private Type SHFILEOPSTRUCT
	hWnd As Long
	wFunc As Long
	pFrom As String
	pTo As String
	fFlags As Integer
	fAborted As Boolean
	hNameMaps As Long
	sProgress As String
End Type

Private Const FO_COPY = &H2

Private Sub Command1_Click()

	If CopyFolder("From", "To") Then
		MsgBox "Copied"
	Else
		MsgBox "Not copied"
	End If

End Sub

Private Function CopyFolder(ByVal sFrom As String, _
							ByVal sTo As String) As Boolean
	Dim SHFileOp As SHFILEOPSTRUCT

	On Error GoTo CF_Err

	CopyFolder = False

	With SHFileOp
		.wFunc = FO_COPY
		.pFrom = sFrom
		.pTo = sTo
	End With
	
	SHFileOperation SHFileOp
	CopyFolder = True

	Exit Function

CF_Err:
	MsgBox "Following error occurd while copying folder " & sFrom & vbCrLf & _
			Err.Description, vbExclamation, "Error message"
End Function

Ou

 

Isso:

Dim fs As New Scripting.FileSystemObject
Set fs = New Scripting.FileSystemObject
fs.CopyFolder SourcePath, DestinationPath
Set fs = Nothing

 

http://www.programmersheaven.com/mb/VBasic...ctory/?S=B20000

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pela dica, entretanto não sei onde escpecificar os endereços de origem e destino, seria em: " If CopyFolder("From", "To")"?

Posso substituir os locais por outros PC da rede, como por exemplo "\\10.35.49.230\destino" e "\\10.35.49.211\origem", isto daria certo.

 

PS ainda não tentei pois não estou em local com acesso a meus programas.

 

Valeu mais uma vez.

 

 

 

Tenta isso:

 

Option Explicit

Private Declare Function SHFileOperation _
	Lib "shell32.dll" _
		Alias "SHFileOperationA" _
			(lpFileOp As SHFILEOPSTRUCT) As Long

Private Type SHFILEOPSTRUCT
	hWnd As Long
	wFunc As Long
	pFrom As String
	pTo As String
	fFlags As Integer
	fAborted As Boolean
	hNameMaps As Long
	sProgress As String
End Type

Private Const FO_COPY = &H2

Private Sub Command1_Click()

	If CopyFolder("From", "To") Then
		MsgBox "Copied"
	Else
		MsgBox "Not copied"
	End If

End Sub

Private Function CopyFolder(ByVal sFrom As String, _
							ByVal sTo As String) As Boolean
	Dim SHFileOp As SHFILEOPSTRUCT

	On Error GoTo CF_Err

	CopyFolder = False

	With SHFileOp
		.wFunc = FO_COPY
		.pFrom = sFrom
		.pTo = sTo
	End With
	
	SHFileOperation SHFileOp
	CopyFolder = True

	Exit Function

CF_Err:
	MsgBox "Following error occurd while copying folder " & sFrom & vbCrLf & _
			Err.Description, vbExclamation, "Error message"
End Function

Ou

 

Isso:

Dim fs As New Scripting.FileSystemObject
Set fs = New Scripting.FileSystemObject
fs.CopyFolder SourcePath, DestinationPath
Set fs = Nothing

 

http://www.programmersheaven.com/mb/VBasic...ctory/?S=B20000

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio, funcionou como uma luva, foi perfeito, consegui copiar uma pasta para dentro de outra sem qualquer problema.

 

Caso Necessite copiar de outro PC pelo IP, seria possível?

Haveria também possibilidade de renomear a pasta toda vez que ela fosse para o novo destino, por exemplo com a data/hora do backup?

If CopyFolder("C:\pasta copiada", "C:\Backup") Then

e no destino seria armazenada como (pasta copiada 20Abr09)

 

Tentei assim e não funcionou : If CopyFolder("C:\pasta copiada" & Now, "C:\Backup") Then

 

 

Agradeço novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso Necessite copiar de outro PC pelo IP, seria possível?

Acho que você teria que mapear a unidade de rede, para dai copiar

 

 

Renomear

 

Name "c:\a" As "c:\b"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Haveria também possibilidade de renomear a pasta toda vez que ela fosse para o novo destino, por exemplo com a data/hora do backup?

If CopyFolder("C:\pasta copiada", "C:\Backup") Then

e no destino seria armazenada como (pasta copiada 20Abr09)

 

Tentei assim e não funcionou : If CopyFolder("C:\pasta copiada" & Now, "C:\Backup") Then

Compartilhar este post


Link para o post
Compartilhar em outros sites

Renomei a pasta depois que efetuar a cópia.

 

:P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio, poderia me dar um modelo de como fazer isto?

Se sim, por favor tente algo que acrescente ao nome da pasta, a data, tal como: " arquivo" para "arquivo 20/04/2009".

 

 

 

Ogrigado.

 

valeu mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ps: Esquece o meu post anteriorm da no mesmo. :lol:

 

 

CopyFolder "C:\teste", "C:\teste" & Format(Now, "ddMMMYYYY")

Em nome de pastas não é possivel colocar "/", pode ser isso que deu erro com você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio, aproveitei sua dica e dei uma aprimorada para minhas necessidades.

 

Ficou como segue:

 

Private Sub Command2_Click()

	If CopyFolder("C:\pasta copiada", "C:\Backup") Then
		MsgBox "Copiado"
		
	Else
		MsgBox "Não copiado"
	End If

	If CopyFolder("C:\Backup\pasta copiada", "C:\Backup\pasta copiada" & " " & Format(Now, "ddMMMYY hhmmss")) Then
		MsgBox "Pasta renomeada"
		Kill "C:\Backup\Pasta copiada\*.*"
		RmDir "C:\Backup\Pasta copiada"
	Else
		MsgBox "Pasta não renomeada, deu pau."
	End If
End Sub

 

Agora pra ficar perfeito tenho que conseguir fazer o Backup através de outro PC, o qual copiará os dados de uma pasta do servidor para outra.

 

Tens alguma idéia?

 

Valeu Brother.

 

(se precisar de algo na zona leste de SP pe só pedir) um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta colocando o nome da pasta destino

"\\servidor\pasta_de_backups" & Format(Now, "ddMMMYY hhmmss")

Mesmo esquema, só que indicando o servidor ao invés do drive.

 

Se assim não funcionar, mapeia o servidor (aquele lance de Mapear unidade de rede...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.