Borrar / copiar archivos en una PDA desde PC
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Borrar / copiar archivos en una PDA desde PC
Tengo una PDA conectada por USB a mi PC. Tengo instalado Active Sync y puedo transferir archivos desde el PC a la PDA y viceversa simplemente arrastrandolos de una ventana a otra. Hasta aquí todo bien.
Alguien sabe si hay alguna forma de hacer lo mismo desde programa con FWH / FWPPC?. Por ejemplo: En mi PC ejecutar un programa FWH que en un momento dado haga FErase("Mi PDA\Carpeta\Archivo.txt")
O bien Copy File ("C:\Mi archivo...", "PDA\Mi archivo...")
Gracias
Rafael
Alguien sabe si hay alguna forma de hacer lo mismo desde programa con FWH / FWPPC?. Por ejemplo: En mi PC ejecutar un programa FWH que en un momento dado haga FErase("Mi PDA\Carpeta\Archivo.txt")
O bien Copy File ("C:\Mi archivo...", "PDA\Mi archivo...")
Gracias
Rafael
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Rafael,
Mira a ver si localizas un servidor "SSH" para Windows Mobile:
http://es.wikipedia.org/wiki/Secure_Shell
Estos dias lo estoy usando para el iPhone, y enamora la potencia que el SSH ofrece (scp, sftp, etc.) Es una herramienta del mundo Unix
Te permitirá hacer eso que quieres y muchísimas más cosas
Mira a ver si localizas un servidor "SSH" para Windows Mobile:
http://es.wikipedia.org/wiki/Secure_Shell
Estos dias lo estoy usando para el iPhone, y enamora la potencia que el SSH ofrece (scp, sftp, etc.) Es una herramienta del mundo Unix
Te permitirá hacer eso que quieres y muchísimas más cosas
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Antonio,
¿Como éste, por ejemplo? http://www.filecluster.com/Internet/Ftp ... et-PC.html
Supongo que he de descargarlo e instalarlo en la PDA. ¿Necesito instalar algo así también en el PC? Lo que quiero es poder borrar ficheros en la PDA mediante un comando ***DESDE EL PC***; no al revés, que es lo que parece que permiten todos los SSH que he visto para Pocket
Gracias
Rafael
¿Como éste, por ejemplo? http://www.filecluster.com/Internet/Ftp ... et-PC.html
Supongo que he de descargarlo e instalarlo en la PDA. ¿Necesito instalar algo así también en el PC? Lo que quiero es poder borrar ficheros en la PDA mediante un comando ***DESDE EL PC***; no al revés, que es lo que parece que permiten todos los SSH que he visto para Pocket
Gracias
Rafael
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Antonio,
Me ha bajado un par de SSH servers para Pocket PC (freeware y de pago). No he podido instalar ninguno de los dos: "xxxx no es una aplicación de Pocket PC válida" en _.
Lo he probado en dos PDA: iPAQ antiguo (2001) con Pocket PC v3.0 y Acer N35 v 4.20, (de 2003)
Seguiré buscado...
Gracias y un saludo,
Rafael
Me ha bajado un par de SSH servers para Pocket PC (freeware y de pago). No he podido instalar ninguno de los dos: "xxxx no es una aplicación de Pocket PC válida" en _.
Lo he probado en dos PDA: iPAQ antiguo (2001) con Pocket PC v3.0 y Acer N35 v 4.20, (de 2003)
Seguiré buscado...
Gracias y un saludo,
Rafael
Rafael
Lo puedes hacer utilizando las funciones RAPI.
Prueba con esto.
FUNCTION FErasePPc( cFile, lMsg )
LOCAL lVRet := RAPI_BORRAFICHERO_PDA( AnsiToWide(cFile), IF(lMsg=NIL,.F.,lMsg) )
IF lMsg
IF lVRet
MSGINFO(cFile + " Fichero Borrado correctante")
ELSE
MSGINFO(" El Fichero " + cFile + " NO ha podido ser Borrado")
ENDIF
ENDIF
RETURN lVRet
HB_FUNC( RAPI_BORRAFICHERO_PDA )
{
typedef HRESULT (WINAPI * _CeRapiInitEx_) (RAPIINIT *) ;
typedef HRESULT (WINAPI * _CeRapiUninit_) (void);
typedef BOOL (WINAPI * _CeDeleteFile_) (LPCWSTR);
typedef DWORD (WINAPI * _CeGetLastError_) (void);
BOOL lMuestraErrores = FALSE ;
HINSTANCE lRapi;
_CeRapiInitEx_ CeRapiInitEx;
_CeRapiUninit_ CeRapiUninit;
_CeDeleteFile_ CeDeleteFile;
_CeGetLastError_ CeGetLastError;
HRESULT lConnected;
RAPIINIT ri;
BOOL lResultado;
// Cargamos la librería
lRapi = LoadLibrary ( "Rapi.dll" );
if ( lRapi == NULL ) {
MessageBox(NULL,"Error:no cargada librería","Rapi",MB_OK);
hb_retl(FALSE);
return ;
}
// Cargamos las funciones
CeRapiInitEx = (_CeRapiInitEx_) GetProcAddress((HMODULE) lRapi,"CeRapiInitEx");
CeRapiUninit = (_CeRapiUninit_) GetProcAddress((HMODULE) lRapi,"CeRapiUninit");
CeDeleteFile = (_CeDeleteFile_) GetProcAddress((HMODULE) lRapi,"CeDeleteFile");
CeGetLastError = (_CeGetLastError_) GetProcAddress((HMODULE) lRapi,"CeGetLastError");
// Conectamos
ri.cbSize = sizeof(RAPIINIT);
ri.heRapiInit = NULL;
ri.hrRapiInit = NULL;
if(FAILED(CeRapiInitEx(&ri))) {
FreeLibrary(lRapi);
hb_retl( FALSE );
return;
}
if(WaitForSingleObject(ri.heRapiInit, 3000) != WAIT_OBJECT_0) {
CeRapiUninit();
FreeLibrary(lRapi);
hb_retl( FALSE ) ;
return;
}
lResultado = CeDeleteFile( (LPCWSTR)hb_parc(1) );
// Control de Errores
if( !lResultado ){
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
CeGetLastError(),
0, // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Mostramos el error (si así lo piden)
lMuestraErrores = (ISLOG(2) ? (BOOL) hb_parl(2) : lMuestraErrores);
if( lMuestraErrores ) MessageBox( NULL, (LPTSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION );
// Liberamos memoria
LocalFree( lpMsgBuf );
}
// Desconectamos
CeRapiUninit();
// Descargamos librería
FreeLibrary(lRapi);
hb_retl( lResultado );
}
Saludos
Lo puedes hacer utilizando las funciones RAPI.
Prueba con esto.
FUNCTION FErasePPc( cFile, lMsg )
LOCAL lVRet := RAPI_BORRAFICHERO_PDA( AnsiToWide(cFile), IF(lMsg=NIL,.F.,lMsg) )
IF lMsg
IF lVRet
MSGINFO(cFile + " Fichero Borrado correctante")
ELSE
MSGINFO(" El Fichero " + cFile + " NO ha podido ser Borrado")
ENDIF
ENDIF
RETURN lVRet
HB_FUNC( RAPI_BORRAFICHERO_PDA )
{
typedef HRESULT (WINAPI * _CeRapiInitEx_) (RAPIINIT *) ;
typedef HRESULT (WINAPI * _CeRapiUninit_) (void);
typedef BOOL (WINAPI * _CeDeleteFile_) (LPCWSTR);
typedef DWORD (WINAPI * _CeGetLastError_) (void);
BOOL lMuestraErrores = FALSE ;
HINSTANCE lRapi;
_CeRapiInitEx_ CeRapiInitEx;
_CeRapiUninit_ CeRapiUninit;
_CeDeleteFile_ CeDeleteFile;
_CeGetLastError_ CeGetLastError;
HRESULT lConnected;
RAPIINIT ri;
BOOL lResultado;
// Cargamos la librería
lRapi = LoadLibrary ( "Rapi.dll" );
if ( lRapi == NULL ) {
MessageBox(NULL,"Error:no cargada librería","Rapi",MB_OK);
hb_retl(FALSE);
return ;
}
// Cargamos las funciones
CeRapiInitEx = (_CeRapiInitEx_) GetProcAddress((HMODULE) lRapi,"CeRapiInitEx");
CeRapiUninit = (_CeRapiUninit_) GetProcAddress((HMODULE) lRapi,"CeRapiUninit");
CeDeleteFile = (_CeDeleteFile_) GetProcAddress((HMODULE) lRapi,"CeDeleteFile");
CeGetLastError = (_CeGetLastError_) GetProcAddress((HMODULE) lRapi,"CeGetLastError");
// Conectamos
ri.cbSize = sizeof(RAPIINIT);
ri.heRapiInit = NULL;
ri.hrRapiInit = NULL;
if(FAILED(CeRapiInitEx(&ri))) {
FreeLibrary(lRapi);
hb_retl( FALSE );
return;
}
if(WaitForSingleObject(ri.heRapiInit, 3000) != WAIT_OBJECT_0) {
CeRapiUninit();
FreeLibrary(lRapi);
hb_retl( FALSE ) ;
return;
}
lResultado = CeDeleteFile( (LPCWSTR)hb_parc(1) );
// Control de Errores
if( !lResultado ){
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
CeGetLastError(),
0, // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Mostramos el error (si así lo piden)
lMuestraErrores = (ISLOG(2) ? (BOOL) hb_parl(2) : lMuestraErrores);
if( lMuestraErrores ) MessageBox( NULL, (LPTSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION );
// Liberamos memoria
LocalFree( lpMsgBuf );
}
// Desconectamos
CeRapiUninit();
// Descargamos librería
FreeLibrary(lRapi);
hb_retl( lResultado );
}
Saludos
Toni Sales
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Toni,
Muchas gracias por tu ejemplo, per no he podido echarlo a andar. Probablemente es porque mis conocimientos de C son muy escasos, por no decir inexistentes.
He incluído todo tu listado entre #pragma BEGIN DUMP y #pragma ENDDUMP. Al compilar me da un montón de errores. Los primeros:
Probablemente me falta algún include o algo más. (Utilizo FWH 2.6 + Harbour) Alguna sugerencia?
Muchas gracias
Rafael
Muchas gracias por tu ejemplo, per no he podido echarlo a andar. Probablemente es porque mis conocimientos de C son muy escasos, por no decir inexistentes.
He incluído todo tu listado entre #pragma BEGIN DUMP y #pragma ENDDUMP. Al compilar me da un montón de errores. Los primeros:
- Error RMAKE/R2001 Exit 1: 'c:\bcc55\bin\bcc32 -M -c -Ic:\harbour\include TEST.C
OM.C'
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
TEST.C:
Error E2147 TEST.PRG 112: 'WINAPI' cannot start a parameter declaration in fu
nction HB_FUN_RAPI_BORRAFICHERO_PDA
Error E2147 TEST.PRG 112: 'RAPIINIT' cannot start a parameter declaration in
function HB_FUN_RAPI_BORRAFICHERO_PDA
Probablemente me falta algún include o algo más. (Utilizo FWH 2.6 + Harbour) Alguna sugerencia?
Muchas gracias
Rafael
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Toni:
He encontrado CeCopy.exe en los Power Toys de Microsoft, aquí: http://www.microsoft.com/downloads/deta ... aylang=en
Va perfecto y hace exactamente lo que yo quería. Además, los Power Toys incluyen un par de aplicaciones que te permiten ejecutar programas de la PDA en el PC y unas cuantas cosas más. Muy útil.
Gracias por apuntarme el camino. Un saludo,
Rafael
He encontrado CeCopy.exe en los Power Toys de Microsoft, aquí: http://www.microsoft.com/downloads/deta ... aylang=en
Va perfecto y hace exactamente lo que yo quería. Además, los Power Toys incluyen un par de aplicaciones que te permiten ejecutar programas de la PDA en el PC y unas cuantas cosas más. Muy útil.
Gracias por apuntarme el camino. Un saludo,
Rafael
Visto que estamos en el tema...
Yo para copiar archivos desde el pocket a la pc lo hago en este modo:
COPY FILE miarchivo.dbf TO \\server\c\carpeta\miarchivo.dbf
todo esto si estoy conectado con wi-fi...
En vez, si estoy conectado con cable, con activesync no funciona... alguna idea de como copiar desde el pocket al pc de programa?, o como ver la unidad del pc al cual estamos conectado?, porque cuando conectamos con activesync se crea una direccion IP sea para el pc que para el pocket...
Saludos.
Yo para copiar archivos desde el pocket a la pc lo hago en este modo:
COPY FILE miarchivo.dbf TO \\server\c\carpeta\miarchivo.dbf
todo esto si estoy conectado con wi-fi...
En vez, si estoy conectado con cable, con activesync no funciona... alguna idea de como copiar desde el pocket al pc de programa?, o como ver la unidad del pc al cual estamos conectado?, porque cuando conectamos con activesync se crea una direccion IP sea para el pc que para el pocket...
Saludos.
Pedro Gonzalez
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Pedro:
Yo acabo de descubrir CECOPY.EXE (lo puedes bajar del link que he puesto más arriba) que me funciona de maravilla para copiar desde/hacia la PDA:
Además, permite copiar directorios enteros (no lo he probado)
No uso WiFi; tengo la PDA conectada al PC mediante un cable USB y ActiveSync
Por cierto: Es posible conectar mi PDA a mi red local mediante cable USB? Alguna idea?
Saludos,
Rafael
Yo acabo de descubrir CECOPY.EXE (lo puedes bajar del link que he puesto más arriba) que me funciona de maravilla para copiar desde/hacia la PDA:
Code: Select all
WaitRun('CECOPY Test.txt "dev:\SD-MMC CARD\MIFOLDER"', .T. )
WaitRun('CECOPY "dev:\SD-MMC CARD\MIFOLDER\Test.txt" desk:\ ', .T. )
No uso WiFi; tengo la PDA conectada al PC mediante un cable USB y ActiveSync
Por cierto: Es posible conectar mi PDA a mi red local mediante cable USB? Alguna idea?
Saludos,
Rafael
Rafel: tambien uso cecopy, pero sirve solo si lo llamas desde el pc, no desde el terminal. El tema es que me copia todo un archivo, y yo quiero copiar solo algunos registros... se que puedo hacer archivos temporales y luego copiarlos, pero ahi me toca hacer una operacion en el terminal y otra en el pc... quisiera hacer todo desde el terminal como lo hago ahora, pero solo si estoy conectado al wi-fi.
Tu PDA puedes conectarla a la red local, que yo sepa solo si estas conectado con wi-fi, al menos esas son mis pruebas, el tema que conectado con el cable es mucho mas rapido.
Saludos
Tu PDA puedes conectarla a la red local, que yo sepa solo si estas conectado con wi-fi, al menos esas son mis pruebas, el tema que conectado con el cable es mucho mas rapido.
Saludos
Pedro Gonzalez