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

Bruno Neves

[Resolvido] Problema com o FileSystemObject

Mensagens Recomendadas

Bruno Neves

Boas pessoal, tou a estagiar numa empresa e pediram-me para actualizar um software de backups feito em vb 2006 e nao percebo nada de vb 2006.

Vou por aqui uma function que me ta a dar cabo da cabeça a ver se alguem que peceba de vb 2006 me possa ajudar:

Public Function RotFicheiros(sLocFich As String, Funcao As RotinaDir, Optional sDestino As String, Optional SubstituirFicheriosExistentes As Boolean = True) As Boolean
       Dim fpath As New FileSystemObject

       On Error GoTo ErrO

       Select Case Funcao
           Case RDDEL
               If fpath.FileExists(sLocFich) Then fpath.DeleteFile(sLocFich), True                                            <- Erro! (End of Statement expected)
           Case RDEXISTE
               If fpath.FileExists(sLocFich) Then RotFicheiros = True
           Case RDCOPIAR
               If fpath.FileExists(sLocFich) And fpath.FolderExists(sDestino) Then
                   fpath.CopyFile(sLocFich, sDestino, SubstituirFicheriosExistentes)
               Else
                   MsgBox("Erro! Directorio de destino nao encontrado.")
               End If
       End Select

       Exit Function

ErrO:

       MsgBox(Err.Number & " " & Err.Description, vbCritical + vbOKOnly, "Backup")
       grava_log("ERRO NO BACKUP: Backup não executado. - ERRO: " & Err.Number & " - " & Err.Description)
       MsgBox("Backup não efectuado.", vbCritical + vbOKOnly, "PBS")

   End Function

eu como nao percebo nada de vb 2006 nao sei como converter isto direito de modo a que fique a correr, o erro é na virgula

se eu puser a virgula da-me o erro que mostrei em cima, se substituir a virgula por um igual da-me um erro em:

If fpath.FileExists(sLocFich) Then fpath.DeleteFile(sLocFich) = True <- Erro! (Exp<b></b>ression is value and therefore cannot be the target of an assignment.)

espero que alguem me possa ajudar :S

Editado por ribeiro55

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Boas Bruno,

apesar de não programar em VB.NET, julgo que o correto deve ser:

If fpath.FileExists(sLocFich) Then fpath.DeleteFile(sLocFich, True)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bruno Neves

muito obrigado Nelson, funcionou. :)

mas mais erros irão me aparecer infelizmente... Tou a converter um projecto (Sistema de Backup) inteiro de vb 2006 para vb 2010...

poderei vir a precisar de mais ajuda :S

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Quando dizes vb2006 referes-te ao VB6?

Algum código podia ser melhorado, passando a utilizar as bibliotecas do .net (ex: System.IO.File em vez desse FileSystemObject)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bruno Neves

Public Function RotFicheiros(ByVal sLocFich As String, Funcao As RotinaDir, Optional sDestino As String, Optional SubstituirFicheriosExistentes As Boolean = True) As Boolean

agora dava-me erro aqui por causa da virgula entre String e Optinal -.-

Optional sDestino As String , Optional SubstituirFicheriosExistentes As Boolean

Alguem sabe porque? o erro é (Optinal parameters must specify a default value)

Eu tive a pesquisar e pus Optional sDestino As String = "Default Value" e ja nao da erro.

Quando dizes vb2006 referes-te ao VB6?

Algum código podia ser melhorado, passando a utilizar as bibliotecas do .net (ex: System.IO.File em vez desse FileSystemObject)

Sim Nelson vb6

E como ponho o codigo com System.IO.File?

alem de ter de fazer o Imports System.IO

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr
Eu tive a pesquisar e pus Optional sDestino As String = "Default Value" e ja nao da erro.

Normalmente utiliza-se algo do tipo:

Optional sDestino As String = ""

E como ponho o codigo com System.IO.File?

alem de ter de fazer o Imports System.IO

O System.IO tem bastantes funções para trabalhar com ficheiros, incluindo as que estão a ser utilizadas na função convertida.

Mas se não te sentes à vontade com vb.net e se está a funcionar, é melhor deixares estar como está e continuares a converter o restante código.

Talvez depois de terminada a conversão e se tiveres tempo, logo tentas atualizar aos poucos.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bruno Neves

Normalmente utiliza-se algo do tipo:

Optional sDestino As String = ""

O System.IO tem bastantes funções para trabalhar com ficheiros, incluindo as que estão a ser utilizadas na função convertida.

Mas se não te sentes à vontade com vb.net e se está a funcionar, é melhor deixares estar como está e continuares a converter o restante código.

Talvez depois de terminada a conversão e se tiveres tempo, logo tentas atualizar aos poucos.

Ainda estou a começar a programar, logo nao é facil para mim. ainda conheço pouca coisa :S

Deste-me uma enorme ajuda.

Ja só faltam converter 4 modulos, 3 form's e algumas classes xD

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bruno Neves

Alguem me pode traduzir as seguintes function's de vb06 para vb 2010? sff

'ler ficheiro ini
   Function getini(ByVal Filename$, ByVal Sect$, ByVal KeyName$, ByVal Default$)
       Const nSize = 10240
   Dim a As String * nSize
       Dim p%
   p = GetPrivateProfileString(Sect, KeyName, Default, a, nSize, Filename)
       getini = Left$(a, p)
   End Function

Function GetUserName() As String
  Dim UserName As String * 255
    Call GetUserNameA(UserName, 255)
    GetUserName = Left$(UserName, InStr(UserName, Chr(0)) - 1)
   End Function

   Function GetComputerName() As String
  Dim UserName As String * 255
    Call GetComputerNameA(UserName, 255)
    GetComputerName = Left$(UserName, InStr(UserName, Chr(0)) - 1)
   End Function

:s

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Boas Bruno

essas funções estão a chamar funções externas que não estão declaradas (GetPrivateProfileString, GetUserNameA e GetComputerNameA).

Verifica aqui alguns exemplos de como podes declarar:

GetPrivateProfileString: http://stackoverflow.com/questions/3211188/getprivateprofilestring-returns-empty-string-despite-having-a-default

GetUserNameA: http://www.developerfusion.com/code/4409/get-current-username-in-vbnet/

GetComputerNameA: http://www.developmentnow.com/g/38_2003_12_0_0_231770/GetComputerNameA-does-not-work-in-VB-Dot-Net.htm

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bruno Neves

Muito obrigado Nelson :)

uma duvida quanto à Grid do vb06 :

no projecto da empresa tenho a seguinte Grid:

gridvb06.png

mas no vb 2010, nao ha uma grid no toolbox como esta, apenas consegui criar algu parecido com uma listview.

mas depois para passar o codigo da grid do vb06 para vb 2010 dame erro em tudo que tenha Grid.

 Private Sub cmd_directorio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_directorio.Click
    Dim i As Integer
    Dim sDirectorio As String
    sDirectorio = Application.ExecutablePath
    Do Until sDirectorio = ""
	    sDirectorio = ""
	    'Localização do Directório
	    sDirectorio = sProcuraDirectorio("Diretório de arquivos a efectuar Backup")
	    'se algum foi escolhido...6
	    If sDirectorio = "" Then Exit Sub
	    If Trim(sDirectorio) = "" Then Exit Sub
	    For i = 1 To Grid.Rows - 1
		    If Trim(Grid.TextMatrix(i, 1)) = sDirectorio Then
			    MsgBox("Localização já inserida!", vbExclamation + vbOKOnly)
			    Exit Sub
		    End If
	    Next
	    Grid.Rows = Grid.Rows + 1
	    Grid.TextMatrix(Grid.Rows - 1, 1) = sDirectorio
	    Grid.Cell(flexcpChecked, Grid.Rows - 1, 2) = ckInclSubPastas.Value
    Loop
    sDirectorio = ""
   End Sub

(este é o botão "Adicionar Directorio" do form )

Alguma sugestao do que eu deva fazer?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Pelo nome, esse grelha é um componente externo da Flex (VSFlexGrid).

É suposto ser uma grelha normal, ou faz alguma coisa de especial?

Em VB.NET julgo que podes usar a DataGridView

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Bruno Neves

Sim, é isso (VSFlexGrid).

a grelha é normal, vai conter os caminhos dos directórios que utilizador pretende efectuar o backup e uma coluna (S.P) para o utilizador escolher que quer tambem as sub pastas (com checkbox).

grelha.png

algu deste genero...

mas nada ligado a base de dados por isso nao da para ser com DataGridView.

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.