Duda Remplazar archivos sin pedir confirmacion de dialogo windows

Iniciado por musicaward, 3 Febrero 2009, 20:02 PM

0 Miembros y 2 Visitantes están viendo este tema.

musicaward

Por favor borren el tema de aqui:
http://foro.elhacker.net/programacion_general/duda_remplazar_archivo_sin_pedir_confirmacion_de_windows-t244013.0.html

creo q lo hice en un lugar inadecuado era en la sección vb
-------------------------------------------------------------------------------------------

Estaba utilizando este code para remplazar archivos.. pero


CitarSHCopyFile "archivo.bmp", "C:\archivo.bmp"

quisiera saber si existe una mejor funcion.. que permita que al remplazar los archivos no pida confirmacion de windows para remplazar a otro archivo con el mismo nombre...

Muchas gracias por leer este tema

Tambien tengo otra duda.. si me pudieran dar un ejemplo de como hacer para
buscar un archivo en el directorio con un boton examinar y que la direccion se muestre en un textbox
usar un command para remplazar cierto archivo... a una ruta que indiquemos en vb


por ejemplo q encontremos c:\archivo.txt



gulabyte


Sobre lo del botón de examinar busca ejemplos sobre CommonDialog en google, es muy simple...
Respecto a lo de reemplazar un archivo... se me ocurre eliminarlo y luego escribir uno en la misma ruta con el mismo nombe...

no sé es una idea.. ;D

salu10!!


Karcrack

Que tal si primero compruebas si existe, en caso de existir lo eliminas y copias el nuevo file?
El VB ya tiene sus propias funciones para copia y eso...

Aqui te hago una funcioncita ;)
Código (vb) [Seleccionar]
Public Sub Reemplazar(ByVal sRuta1 As String, ByVal sRuta2 As String)
   'Si existe el fichero...
   If Len(Dir$(sRuta2, vbArchive)) > 0 Then
       'Primero comprobamos que no tengo atributos ReadOnly(Solo lectura)
       If (GetAttr(sRuta2) And vbReadOnly) Then
           'Le quitamos el solo lectura
           Call SetAttr(sRuta2, GetAttr(sRuta2) - vbReadOnly)
       End If
       'Lo eliminamos
       Call Kill(sRuta2)
   End If
   'Copiamos el fichero...
   Call FileCopy(sRuta1, sRuta2)
End Sub


Y lo del cuadro de dialogo tienes aqui unos lnks ;)
http://www.recursosvisualbasic.com.ar/htm/tutoriales/control-commondialog.htm
http://www.recursosvisualbasic.com.ar/htm/listado-api/api-27.htm

Te recomiendo si estas empezando el primero ;)

Saludos ;D

xkiz ™

para reemplazar un archivo podes hacer asi:


Código (vb) [Seleccionar]
' el primer parametro es el archivo de origen, el 2º parametro es el destino final
FileCopy "C:\archivo1.bmp", "C:\archivo.bmp"


Karcrack

Cita de: xkiz en  3 Febrero 2009, 20:28 PM
para reemplazar un archivo podes hacer asi:


Código (vb) [Seleccionar]
' el primer parametro es el archivo de origen, el 2º parametro es el destino final
FileCopy "C:\archivo1.bmp", "C:\archivo.bmp"


Si el esta con atributo Solo Lectura no podras hacer eso...

Saludos ;D

XcryptOR

mira si quieres usar el api SHFileOperation para copiar un file y si existe reemplazarlo debes usar FOF_NOCONFIRMATION para que no te muestre el mensaje del cual hablas.

aqui te dejo el code:


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&
    FO_DELETE = &H3&
    FOF_SILENT = &H4&
    FOF_NOCONFIRMATION = &H10&
    FOF_NOCONFIRMMKDIR = &H200&
    FOF_NOERRORUI = &H400&
    FOF_NOCOPYSECURITYATTRIBS = &H800&
End Enum

Public Sub mCopyFile(sSource As String, sTarget As String)

    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
        .pTo = sTarget
    End With
   
    Call SHFileOperation(SHFileOp)
End Sub



musicaward

Cita de: XcryptOR en  4 Febrero 2009, 02:43 AM
mira si quieres usar el api SHFileOperation para copiar un file y si existe reemplazarlo debes usar FOF_NOCONFIRMATION para que no te muestre el mensaje del cual hablas.

aqui te dejo el code:


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&
    FO_DELETE = &H3&
    FOF_SILENT = &H4&
    FOF_NOCONFIRMATION = &H10&
    FOF_NOCONFIRMMKDIR = &H200&
    FOF_NOERRORUI = &H400&
    FOF_NOCOPYSECURITYATTRIBS = &H800&
End Enum

Public Sub mCopyFile(sSource As String, sTarget As String)

    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
        .pTo = sTarget
    End With
   
    Call SHFileOperation(SHFileOp)
End Sub


Hola estoy interesado con lo de FOF_NOCONFIRMATION aplique lo que me explicaste pero  me sigue saliendo igual


sera que tenga que aplicar algo mas ?

CitarSHCopyFile "Archivo.txt", "C:\Archivo.txt"

o el codigo que uso lo estoy aplicando mal...

XcryptOR

#7
A mi no me pide confirmación, el uso de esta función desde donde lo llames seria así:

por ejemplo haciendo la llamada desde el form:

Código (vb) [Seleccionar]
Private Sub Form_Load()
     call mCopyFile(sSource As String, sTarget As String)
End Sub


PD: no te olvide de estas constantes FOF_NOCONFIRMMKDIR , FOF_NOCONFIRMATION



musicaward

Cita de: XcryptOR en  5 Febrero 2009, 01:52 AM
A mi no me pide confirmación, el uso de esta función desde donde lo llames seria así:

por ejemplo haciendo la llamada desde el form:

Código (vb) [Seleccionar]
Private Sub Form_Load()
     call mCopyFile(sSource As String, sTarget As String)
End Sub


PD: no te olvide de estas constantes FOF_NOCONFIRMMKDIR , FOF_NOCONFIRMATION

me vota error de sintaxis sera por q estoy usando vb6..?


XcryptOR

Perdon hermano, ese fue un error garrafal, casi me muero cuando lo veo aquí esta la forma correcta:
Código (vb) [Seleccionar]
Private Sub Form_Load()
     call mCopyFile("origen", "destino") ' donde origen es el file que quieres copiar y destino es la ruta donde quieres copiarte
End Sub


gracias por hacerme caer en cuenta de este mostruoso error
:rolleyes: