Eliminar archivos con la API de Windows ShFile()

Eliminar archivos con la API de Windows ShFile()

Postby VPOZO » Thu Sep 03, 2009 11:07 pm

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
VPOZO
 
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

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

Postby Armando » Thu Sep 03, 2009 11:38 pm

VPozo:

Yo lo hago así y me funciona

Code: Select all  Expand view

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
Armando
 
Posts: 3200
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby VPOZO » Fri Sep 04, 2009 1:43 pm

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
VPOZO
 
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

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

Postby Lautaro » Fri Sep 04, 2009 1:48 pm

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
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

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

Postby Willi Quintana » Fri Sep 04, 2009 1:54 pm

Hola, No importa que tipo de unidadsea (FAT,FAT32,NTFS),,, yo lo hago asi:
Code: Select all  Expand view

.
..
...
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
Willi Quintana
 
Posts: 1018
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

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

Postby jrestojeda » Fri Sep 04, 2009 1:59 pm

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 view

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
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

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

Postby VPOZO » Fri Sep 04, 2009 3:00 pm

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
VPOZO
 
Posts: 32
Joined: Tue Jun 24, 2008 5:19 pm
Location: Punta Arenas, Chile

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

Postby jrestojeda » Fri Sep 04, 2009 3:02 pm

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
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 13 guests