• Domingo 28 de Abril de 2024, 19:44

Autor Tema:  Copiar Archivos Con La Api  (Leído 2054 veces)

aKul

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Copiar Archivos Con La Api
« en: Jueves 15 de Abril de 2004, 21:57 »
0
Necesitaria si alguien  me puede decir si existe una funcion de la api que me diga si  un archivo esta o no bloqueado.

Desde ya Gracias :lightsabre:

Gelion

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
    • http://www.gelion.cjb.net
Re: Copiar Archivos Con La Api
« Respuesta #1 en: Jueves 15 de Abril de 2004, 23:47 »
0
Bloqueados?
Existe una funcion de VB que hace eso, pero si lo quieres en API

Tengo esto, espero que te sirva
'----------------------------------------------------------------------------------------
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
'-------------------------------------------------------------------------------------------
Private Sub Command1_Click()
Dim r As Long
r = GetFileAttributes("C:\jaja.jpg")
Select Case r
Case FILE_ATTRIBUTE_ARCHIVE
MsgBox "Archivo"
Case FILE_ATTRIBUTE_DIRECTORY
MsgBox "Directorio"
Case FILE_ATTRIBUTE_HIDDEN
MsgBox "Oculto"
Case FILE_ATTRIBUTE_NORMAL
MsgBox "Normal"
Case FILE_ATTRIBUTE_READONLY
MsgBox "Sololectura"
Case FILE_ATTRIBUTE_SYSTEM
MsgBox "Sistema"
Case FILE_ATTRIBUTE_TEMPORARY
MsgBox "Temporal"
End Select
Sé que crees que comprendes lo que piensas que he dicho, pero no estoy seguro de que lo que creíste oír sea lo que yo quise decir

aKul

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Copiar Archivos Con La Api
« Respuesta #2 en: Lunes 19 de Abril de 2004, 16:25 »
0
gRACIAS POR TU RESPUESTA, ESA MISMA FUNCION   ES LA QUE ESTOY UTILIZANDO,SIN EMBARGO NO PUEDO SOLUCIONAR EL PROBLEMA. dE ALGUNA FORMA EL NT BLOQUEA CIERTOS ARCHIVOS QUE NO PUEDO DETECTAR CON LA FUNCION DE LA API. eL MISMO PROBLEMA ME APARCIO EN LINUX, PERO LNUX GUARDA UNA LISTA DE LOS ARCHIVOS QUE EL KERNEL ESTA BLOQUEANDO Y CONSULTANDO ESA LISTA SE SOLUCIONA EL PROBLEMA.  ¿nO EXISTE ALGO SIMILAR EN NT?

DESDE YA GRACIAS
 :lightsabre:

Gelion

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
    • http://www.gelion.cjb.net
Re: Copiar Archivos Con La Api
« Respuesta #3 en: Miércoles 21 de Abril de 2004, 07:12 »
0
Que tipos de archivos te refieres, si me dices cuales talvez pueda ayudarte mejor, que terminacion tienen, etc. :blink:
Sé que crees que comprendes lo que piensas que he dicho, pero no estoy seguro de que lo que creíste oír sea lo que yo quise decir

aKul

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Copiar Archivos Con La Api
« Respuesta #4 en: Lunes 26 de Abril de 2004, 17:37 »
0
No es un archivo o archivos en particular, estamos desarrollando un sistema de backup automatizado, cuando se dispara intenta copiar  y comprimir unlistado de directorios a su destino de resguardo, el problema es que el proceso es interrumpido por el nt al intentar abrir archivos que estan aparentmente bloqueados o en uso , no sabemos bien  porque pero esto ocurre muy rara vez con algunos archivos y no con todos. El problema real es que no genera un error en tiempo de ejecucion, si fuera asi podriamos usar una sentencia tipo "on error"  por el contrario el nt, interrumpe la ejecucion de nuestro programa.

Por el momento no tenemos solucion, y tampoco sabemos porque el nt se comporta asi con ciertos archivos y no con todos en general.
Saludos y gracias

Gelion

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
    • http://www.gelion.cjb.net
Re: Copiar Archivos Con La Api
« Respuesta #5 en: Martes 27 de Abril de 2004, 06:17 »
0
Bueno, ya checaste poniendo tu aplicacion como tarea de NT

O, no se bien como haces el proceso, pero yo lo entiendo asi:

-Se dispara el Backup
-Va a una carpeta X
-Copia en memoria (un array de bytes) el archivo (no utilizo el copiar comun, ya que al ser un archivo unico, NT no te deja)
-Escribo en el disco el array (nombredearchivoDLL.DAT)
-Cuando termino de hacer eso, comprime la carpeta y la elimina
-Guarda en algun lugar el archivo comprimido

De ese modo, la aplicacion no deberia darte problemas.

¿Como checar en que archivo ocurre el fallo?
Que el programa vaya copiando uno por uno, cuando se cierre checas donde se quedo y que archivo seguia

Si checas en que archivo te ocurrio eso (para checarlo) y me dices, talvez se resuelva este problema. :blink:
Sé que crees que comprendes lo que piensas que he dicho, pero no estoy seguro de que lo que creíste oír sea lo que yo quise decir

Juanolo

  • Miembro MUY activo
  • ***
  • Mensajes: 202
    • Ver Perfil
Re: Copiar Archivos Con La Api
« Respuesta #6 en: Miércoles 28 de Abril de 2004, 01:50 »
0
Siendo tan sólo un aficionado entusiasta, siento un poco de vergüenza al opinar en este tema, pues la mayoría de lo que se ha discutido no lo entiendo. De hecho, no conozco Windows NT.
Sin embargo, hace un tiempo me ocurrió algo que podría servir:
Necesitaba copiar desde la red un lote de archivos DBF, algunos de los cuales estaban siendo utilizados por un antiguo programa en Clipper. Pues bien, cuando hacía la operación desde el viejo MS-DOS no tenía problemas. Al intentar hacerlo con la instrucción FileCopy de Visual, se caía el sistema cuando se topaba con un archivo en uso. Podía manejar el error pasando a la instrucción siguiente, pero el archivo quedaba sin ser copiado. (Perdón por la lata... Pero ya voy)
Descubrí la función api:
Código: Text
  1.  
  2. Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
  3.  

La llamé así:

Código: Text
  1. CopyFile oRiginal, nUevo, 0
  2.  
  3.  

Y los problemas se acabaron.

Espero sirva.

Salu2. :whistling:
La luz que sólo se ilumina a sí misma, es oscuridad.