Eliminar archivos con la API de Windows ShFile()

Post Reply
User avatar
VPOZO
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Eliminar archivos con la API de Windows ShFile()

Post by VPOZO »

Un saludo a los amigos del foro, les pido ayuda con lo siguiente tengo una aplicacion que genera varias tablas temporales y es necesario eliminarlas al terminar la ejecucion del programa, el tema que he probado con FERASE(), DELETE FILE y otro comandos pero lo unico que me funciona es eliminarlas usando la API de windows ShFile() el problema es que siempre esta pidiendo confirmacion de que va a eliminar multiples archivos y el parametro FOF_NOCONFIRMATION, no funciona: esto es lo que defino en la cabezera del programa

#define FO_DELETE 0x0003
#define FOF_ALLOWUNDO 0x0040
#define FOF_NOCONFIRMATION 0x0010

y el programa hace esto:

FUNCTION Borra( cFile )
ShFile( GetActiveWindow(), FO_DELETE, cFile + Chr( 0 ), Nil, nAnd( FOF_ALLOWUND, FOF_NOCONFIRMATION))
RETURN .T.

la idea seria borrar estos archivos temporales sin que el usuario sepa y que ojala no los envié a la papelera de reciclaje. Por lo que he leído en este foro con este código debiera funcionar pero no PASA NADA...!!

GRACIAS...
User avatar
Armando
Posts: 3275
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Been thanked: 2 times
Contact:

Re: Eliminar archivos con la API de Windows ShFile()

Post by Armando »

VPozo:

Yo lo hago así y me funciona

Code: Select all | Expand


DELETE FILE (cPathFiles)+"\"+ALLTRIM(cArchivo)


Solo hay que asegurarse de que el archivo esta cerrado y que
el path es el correcto

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
VPOZO
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Re: Eliminar archivos con la API de Windows ShFile()

Post by VPOZO »

Gracias compañero. Pero el comando DELETE FILE el ERASE o el FERASE(), no borran el archivo no me da ningún error solo no los borra quizás por que es una unidad NFTS no se, es raro, como te comentaba que con la Api de windows ningún drama, pero el tema de la confirmación es molesto, ademas que el usuario pude interpretar el mensaje como que va ha eliminar información del sistema y siempre la va poner que "NO". Le voy a dar un par de vueltas mas ha este tema y si no voy a terminar haciendo un archivo .bat que los borre y lo llamo desde la aplicacion ( DEL "TMP*.DBF") pero no es muy profecional ya que lo pueden borrar o cambiar ya que es facil de editar.

Bueno les dejo la inquietud Gracias..
User avatar
Lautaro
Posts: 327
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile
Has thanked: 3 times
Been thanked: 4 times
Contact:

Re: Eliminar archivos con la API de Windows ShFile()

Post by Lautaro »

Vpozo:

Que atributos tienen los archivos que deseas borrar, a lo mejor son de solo lectura y ese es el problema.

Atte.,

Lautaro Moreira
User avatar
Willi Quintana
Posts: 1025
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Eliminar archivos con la API de Windows ShFile()

Post by Willi Quintana »

Hola, No importa que tipo de unidadsea (FAT,FAT32,NTFS),,, yo lo hago asi:

Code: Select all | Expand


.
..
...
nNum := -1
cfile := CurDrive() + ":\" + Curdir() + "\TMP\xxx.tmp"  
IF FILE(cFile)
 nNUm := FERASE(cFile)
EndIf
Return(nNum = 0)    // si nNum es 0, se borro correctamente
...
..
.
User avatar
jrestojeda
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Eliminar archivos con la API de Windows ShFile()

Post by jrestojeda »

Hola amigo...
A mi esto me funciona correctamente:
Lo que hago es copiarme dos archivos desde el servidor a la PC local y los uso como temporales, al finalizar todo el proceso los elimino.

Code: Select all | Expand


Private TEMPOB,TEMPON,NomA

NomA:=CurDrive()+":\T"+SUBSTR(TIME(),4,2)+SUBSTR(TIME(),7,2)

TEMPOB:=NomA+".DBF"
COPY FILE ("\\Servidor\Datos\INGCOMP.DBF") TO &TEMPOB

TEMPON:=NomA+".CDX"
COPY FILE ("\\Servidor\Datos\INGCOMP.CDX") TO &TEMPON

USE &TEMPOB ALIAS (cAliasIng) NEW
AdsEnableEncryption(cKey)
DATABASE oDbfIng
oDbfIng:bEoF:=nil
oDbfIng:SetOrder(2)
oDbfIng:GoTop()

Base  :=TEMPOB
Indice:=TEMPON

// Aquí está todo el proceso...

// Al finalizar el proces borro así
FErase(Base)
FErase(Indice)
 


Espero te sirva.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
VPOZO
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

Re: Eliminar archivos con la API de Windows ShFile()

Post by VPOZO »

Primero que nada Gracias a todos los que demostraron interes en el tema planteado y la verdad que la solucion era sencilla luego de hacer todas las pruebas que me indicaron me di cuenta que el comando FERASE() no acepta comodines osea si hago esto Ferase("TMP*.DBF") no borra los archivos por que no acepta el comodin "*" pero si los elimino uno por uno ejemplo Ferase("TMP32651.DBF"), lo borra al toque.

Gracias nuevamente :oops:
User avatar
jrestojeda
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Eliminar archivos con la API de Windows ShFile()

Post by jrestojeda »

Perfecto... Me alegro saber que te funcionó!
Saludos!
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
Post Reply