In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Funciones Inline C pregunta para Ignacio
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Funciones Inline C pregunta para Ignacio
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.
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.
- ignacio
- Site Admin
- Mensajes: 9463
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Funciones Inline C pregunta para 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.
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.
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Funciones Inline C pregunta para Ignacio
> 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.
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
Bingen,
aquí podrás encontrar la documentación del API:
http://msdn2.microsoft.com/en-us/library/default.aspx
Saludos,
José Lalín
aquí podrás encontrar la documentación del API:
http://msdn2.microsoft.com/en-us/library/default.aspx
Saludos,
José Lalín
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Funciones Inline C pregunta para Ignacio
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);
}
}
}
}
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
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
> 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
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Funciones Inline C pregunta para Ignacio
> 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.
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.
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Funciones Inline C pregunta para Ignacio
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.
>
>
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
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
> 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
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Funciones Inline C pregunta para Ignacio
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
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
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
> 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