Jump to content
Bruno Neves

[Resolvido] Problema com o FileSystemObject

Recommended Posts

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

Edited by ribeiro55

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.