Página 1 de 1
Funciones Inline C pregunta para Ignacio
Publicado: Lun Jun 26, 2006 12:52 pm
por Bingen Ugaldebere
Buenas Ignacio el otro día me diste una pista sobre una función INLINE C
XA_FUNC(APICOPYFILE)
{
hb_retl( CopyFile( hb_parc( 1 ), hb_parc( 2 ), FALSE )
}
#pragma ENDDUMP
Para no molestarte mas, puedes decirme de donde sacar información para
otras como MoveFile o DeleteFiletoRecycleBin.
Salu2 y gracias.
Funciones Inline C pregunta para Ignacio
Publicado: Lun Jun 26, 2006 2:03 pm
por ignacio
Bingen,
BCC55HelpWin32.hlp
Logicamente BCC55 se corresponde con el directorio donde instalastes Borland
C++ 5.5
Saludos,
"bingen" <
bingen@muninser.com> escribió en el mensaje
news:[email=
449fbc96@ozsrvnegro.ozlan.local...]
449fbc96@ozsrvnegro.ozlan.local...[/email]
> Buenas Ignacio el otro día me diste una pista sobre una función INLINE C
>
> XA_FUNC(APICOPYFILE)
> {
> hb_retl( CopyFile( hb_parc( 1 ), hb_parc( 2 ), FALSE )
> }
>
> #pragma ENDDUMP
>
> Para no molestarte mas, puedes decirme de donde sacar información para
> otras como MoveFile o DeleteFiletoRecycleBin.
>
> Salu2 y gracias.
Funciones Inline C pregunta para Ignacio
Publicado: Lun Jun 26, 2006 4:11 pm
por Bingen Ugaldebere
> BCC55HelpWin32.hlp
Lamento no tener este archivo, no debía de venir en mi instalación de
BCC55, alguien me lo puede facilitar si es legal hacerlo??
bingen@muninser.com
Salu2 y gracias.
Funciones Inline C pregunta para Ignacio
Publicado: Lun Jun 26, 2006 4:23 pm
por jlalin
Bingen,
aquí podrás encontrar la documentación del API:
http://msdn2.microsoft.com/en-us/library/default.aspx
Saludos,
José Lalín
Funciones Inline C pregunta para Ignacio
Publicado: Mar Jun 27, 2006 9:19 am
por Bingen Ugaldebere
Gracias José, sí ya he estado mirando por esos lares del MSDN e incluso
he encontrado funciones para lo que quiero, pero con mi absoluta
ignorancia de C no acabo de entender muy bien que hacer.
Según lo leido en el MSDN me he hecho esta función INLINE C para mover
archivos y me los mueve pero no los quita del origen ¿?
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC(APIMOVEFILE)
{
hb_retl( MoveFileEx( hb_parc( 1 ), hb_parc( 2 ), 0 ) ) ;
}
#pragma ENDDUMP
Incluso he encontrado esta función para borrar a la papelera de
reciclaje en C++ e intento transformarla a una INLINE C pero no me da
mas que errores.
// Delete files to the Recycle Bin
#include <windows.h>
#include <stdio.h>
#include <dir.h>
static char HELP[] =
"n"
"RDEL file file file ...n"
"n"
"Deletes the specified files, sending them to the Recycle Bin.n"
"Ambiguous filespecs may be used to delete multiple files.n"
"Hidden and system files will not be deleted";
bool RecycleFile(const char *specs)
{
SHFILEOPSTRUCT info = {NULL};
char complete_specs[MAX_PATH+2] = {''};
char *dummy;
if (GetFullPathName(specs, sizeof(complete_specs), complete_specs,
&dummy)
!= 0)
{
info.wFunc = FO_DELETE;
info.pFrom = complete_specs;
info.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION| FOF_FILESONLY;
return SHFileOperation(&info) == 0;
}
return false;
}
const DWORD EXCLUDED_FILES =
FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM;
void main(int argc, char **argv)
{
if (argc < 2)
puts(HELP);
else
{
for (int i = 1; i < argc; i++)
{
char drive[MAXDRIVE];
char directory[MAXDIR];
// char name[MAXFILE];
// char extension[MAXEXT];
fnsplit(argv, drive, directory, NULL, NULL);
WIN32_FIND_DATA data;
HANDLE handle = FindFirstFile(argv, &data);
if (handle != INVALID_HANDLE_VALUE)
{
do
{
if ((data.dwFileAttributes & EXCLUDED_FILES) == 0)
{
char specs[MAXPATH+1];
strcpy(specs, drive);
strcat(specs, directory);
strcat(specs, data.cFileName);
printf("Deleting %sn", specs);
RecycleFile(specs);
}
} while (FindNextFile(handle, &data));
FindClose(handle);
}
}
}
}
Funciones Inline C pregunta para Ignacio
Publicado: Mar Jun 27, 2006 11:46 am
por jlalin
Bingen,
> Según lo leido en el MSDN me he hecho esta función INLINE C para mover
> archivos y me los mueve pero no los quita del origen ¿?
Mira la documentación del segundo parámetro:
---
lpNewFileName
[in] Pointer to a null-terminated string that specifies the new name of
lpExistingFileName on the local computer.
When moving a file, the destination can be on a different file system or
volume. If the destination is on another drive, you must set the
MOVEFILE_COPY_ALLOWED flag in dwFlags.
When moving a directory, the destination must be on the same drive.
---
El problema podría ser por eso.
> #pragma BEGINDUMP
>
> #include <windows.h>
> #include <xailer.h>
>
> XA_FUNC(APIMOVEFILE)
> {
> hb_retl( MoveFileEx( hb_parc( 1 ), hb_parc( 2 ), 0 ) ) ;
> }
>
> #pragma ENDDUMP
> Incluso he encontrado esta función para borrar a la papelera de
> reciclaje en C++ e intento transformarla a una INLINE C pero no me da
> mas que errores.
No necesitas bajar a C para hacer esto. Puedes hacerlo con la clase
TFileOperationDlg de Xailer (la tienes en la pestaña Diálogos).
Suelta un componente TFileOperationDlg en un TForm y configúralo así en
el inspector de objetos:
:nAction := foDELETE
:aFrom := { *.tmp }
:lAllowUndo := .T.
:lNoConfirmation := .T.
:lFilesOnly := .T.
Luego llámalo desde donde quieras:
IF :Run()
LogDebug( "Archivos eliminados." )
ENDIF
Con eso debería funcionar.
Saludos,
José Lalín
Funciones Inline C pregunta para Ignacio
Publicado: Mié Jun 28, 2006 9:02 am
por Bingen Ugaldebere
> Suelta un componente TFileOperationDlg en un TForm
Lo siento José pero no veo que mi pestaña diálogos (Pre Release 7 Marzo
2006)incorpore esta opción pero lo veo en la ayuda asi que me pongo con
ello por código.
Ya ves yo creándome los form de copiar, mover etc y ya esta la clase
para ello en Xailer, jeje.
Salu2 y gracias.
Funciones Inline C pregunta para Ignacio
Publicado: Mié Jun 28, 2006 1:05 pm
por Bingen Ugaldebere
Gracias José.
Con este componente TFileOperationDlg sale perfecto, pero no se puede
controlar si ha habido errores en la operación, una pena por que nuestro
programa no puede controlar el resultado de la operación de copia,
movimiento o borrado.
¿O conoces alguna manera de controlarlo?
Salu2
>> Suelta un componente TFileOperationDlg en un TForm
>
> Lo siento José pero no veo que mi pestaña diálogos (Pre Release 7 Marzo
> 2006)incorpore esta opción pero lo veo en la ayuda asi que me pongo con
> ello por código.
>
> Ya ves yo creándome los form de copiar, mover etc y ya esta la clase
> para ello en Xailer, jeje.
>
> Salu2 y gracias.
>
>
Funciones Inline C pregunta para Ignacio
Publicado: Jue Jun 29, 2006 12:25 am
por jlalin
Bingen,
> Con este componente TFileOperationDlg sale perfecto, pero no se puede
> controlar si ha habido errores en la operación, una pena por que nuestro
> programa no puede controlar el resultado de la operación de copia,
> movimiento o borrado.
Tienes dos posibilidades para comprobar si ha habido algún problema
durante el proceso:
* La data pública lAborted que indica si el usuario ha cancelado la
operación,
* El método Run() devuelve .T. si la operación se ha completado con
éxito y .F. si ha fallado.
Saludos,
José Lalín
Funciones Inline C pregunta para Ignacio
Publicado: Jue Jun 29, 2006 9:27 am
por Bingen Ugaldebere
Perfecto muchas gracias, lAborted estaba controlado pero lo del Run() no
lo sabia con esto ya esta 100% Ok y no te molesto más.
>
> Bingen,
>
>> Con este componente TFileOperationDlg sale perfecto, pero no se puede
>> controlar si ha habido errores en la operación, una pena por que
>> nuestro programa no puede controlar el resultado de la operación de
>> copia, movimiento o borrado.
>
> Tienes dos posibilidades para comprobar si ha habido algún problema
> durante el proceso:
>
> * La data pública lAborted que indica si el usuario ha cancelado la
> operación,
>
> * El método Run() devuelve .T. si la operación se ha completado con
> éxito y .F. si ha fallado.
>
> Saludos,
> José Lalín
Funciones Inline C pregunta para Ignacio
Publicado: Jue Jun 29, 2006 3:50 pm
por jlalin
Bingen,
> Perfecto muchas gracias, lAborted estaba controlado pero lo del Run() no
> lo sabia con esto ya esta 100% Ok y no te molesto más.
Espero que sí nos "molestes" con todas las dudas que tengas

)
Saludos,
José Lalín