Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2009-09

problema con la barra de directorio "\"

13 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Iván Mesa

Hola a todos.
Bueno, he estado trasteando hasta desconfigurar el compilador de L�zarus. Ahora tengo un problema.
Tengo que realizar una copia de ficheros, y, tras estar tocando (no se donde, lo siento :_(, soy un toc�n), ahora en los strings me ha desaparecido la barra de directorio, y me da un error. Me gustar�a saber d�nde cambi� eso, ya que el programa lo he visto funcionar, y c�mo volver a ponerlo como estaba. Mil gracias.
Abrazos

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090903/f1b4091e/attachment.html>

Reply by email

JoshyFun
to Iván Mesa

Hello Iv�n,

Thursday, September 3, 2009, 5:01:43 PM, you wrote:

IM> Hola a todos.
IM> Bueno, he estado trasteando hasta desconfigurar el compilador de L�zarus. IM> Ahora tengo un problema.
IM> Tengo que realizar una copia de ficheros, y, tras estar IM> tocando (no se donde, lo siento :_(, soy un toc�n), ahora en los IM> strings me ha desaparecido la barra de directorio, y me da un IM> error.
IM> Me gustar�a saber d�nde cambi� eso, ya que el programa lo he IM> visto funcionar, y c�mo volver a ponerlo como estaba. IM> Mil gracias.
IM> Abrazos

En los strings de donde ?

Best regards, JoshyFun

Reply by email

Iván Mesa
to JoshyFun

Bueno, mi desesperaci�n y mi estado mental se intuir leyendo el post, pero voy a explicarme mejor. Lo que me ocurre es muy sencillo. He realizado un peque�o programa con una base de datos SQLite. La base de datos la quiero cargar en una PDA, usando el Async, en el que tengo una carpeta compartida. Pues mi problema es usando la funci�n CopyFile no se copia la BBDD. He verificado que est� cerrada, y que he puesto bien las rutas de origen y destino, pero nada. No me ha quedado m�s opci�n que realizar un bat que ejecute un copy del dos para poder hacer dicha operaci�n. Pero, por si esto fuera poco, en la PDA me he encontrado el mismo problema: Una vez tengo la BBDD en la carpeta My Documents, quiero pasarla al directorio de datos de programas, para poder abrirla y trabajar desde la PDA. Pero aqu�, adem�s de no funcionar el CopyFile, me he encontrado que tambi�n me da un error el TProcess a ejecutar un bat con el correspondiente copy del s.o. Lo m�s cachondo es que el bat funciona, pues si lo ejecuto desde la opci�n ejecutar del WinCe, la copia se realiza. Tambi�n si ejecuto desde la consola. Pero desde L�zarus me da el error 87. Tras un mont�n de pruebas, ya no se me ocurre qu� puede estar pasando. En fin, espero que ahora est� el planteamiento m�s claro, y alguien pueda ayudarme. Gracias.

Reply by email

JoshyFun
to Iván Mesa

Hello Iv�n,

Monday, September 7, 2009, 10:03:41 AM, you wrote:

IM> Bueno, mi desesperaci�n y mi estado mental se intuir leyendo IM> el post, pero voy a explicarme mejor.
IM> Lo que me ocurre es muy sencillo. He realizado un peque�o IM> programa con una base de datos SQLite.
IM> La base de datos la quiero cargar en una PDA, usando el IM> Async, en el que tengo una carpeta compartida. IM> Pues mi problema es usando la funci�n CopyFile no se copia la IM> BBDD. He verificado que est� cerrada, y que he puesto bien las IM> rutas de origen y destino, pero nada. No me ha quedado m�s opci�n IM> que realizar un bat que ejecute un copy del dos para poder hacer IM> dicha operaci�n.
IM> Pero, por si esto fuera poco, en la PDA me he encontrado el IM> mismo problema: Una vez tengo la BBDD en la carpeta My Documents, IM> quiero pasarla al directorio de datos de programas, para poder IM> abrirla y trabajar desde la PDA. Pero aqu�, adem�s de no funcionar IM> el CopyFile, me he encontrado que tambi�n me da un error el IM> TProcess a ejecutar un bat con el correspondiente copy del s.o. IM> Lo m�s cachondo es que el bat funciona, pues si lo ejecuto IM> desde la opci�n ejecutar del WinCe, la copia se realiza. Tambi�n IM> si ejecuto desde la consola. Pero desde L�zarus me da el error 87. IM> Tras un mont�n de pruebas, ya no se me ocurre qu� puede estar pasando. IM> En fin, espero que ahora est� el planteamiento m�s claro, y alguien pueda ayudarme. IM> Gracias.

He visto por distintas p�ginas muchos problemas de WinCE y la funci�n FileCopy, incluido el mismo problema que tienes tu, s�lo que en vez de L�zarus con VB. Si el �nico problema es copiar un archivo hazlo a "pedal" sin usar el FileCopy (ojo, no se si se puede, ya que no uso WinCE ni tengo para probar ni nada). Una copia "a pedal" con L�zarus ser�a algo como:

var
   FIn,FOut: TFileStream;
begin
   FIn:=TFileStream.Create('X:\Origen\File.ext',fmOpenRead or
        fmShareDenyWrite);
   FOut:=TFileStream.Create(W:\Destino\File.ext',fmCreate);
   FOut.CopyFrom(FIn,FIn.Size);
   FIn.Free;
   FOut.Free;
end;

Lo del error 87 es "Par�metro no v�lido", pero es un error del sistema operativo (WinCE) y supongo que es un problema de permisos (supongo que tendr�s que pedir un permiso para usar cierto tipo de funciones, como un FileCopy desde un dispositivo externo).

Best regards, JoshyFun

Reply by email

Iván Mesa
to JoshyFun

Gracias por tu respuesta y por el buen camino encontrado. Se pode hacer lo mismos de tantas formas diferentes.... Todo lo que me pasa se ha reducido a un peque�o descuido. Despu�s de estar toda la noche peg�ndome con el tema, he descubierto que: nombrefichero := 'X:\Origen\File.ext' no lo interpreta correctamente.

La f�rmula ser�a:
const
   barra ='\';
begin
...
nombrefichero := 'X:' + barra +'Origen'+barra+'File.ext';
...
end

Con esto, puedo usar la funci�n FileCopy tanto en windows como en WindowsCE.

A lo mejor, es ah� donde todo el mundo choca.

Gracias.
Iv�n.

Reply by email

Raistware
to Iván Mesa

Iv�n Mesa escribi�:

Show quoted text 20 lines
Gracias por tu respuesta y por el buen camino encontrado. Se pode hacer lo mismos de tantas formas diferentes.... Todo lo que me pasa se ha reducido a un peque�o descuido. Despu�s de estar toda la noche peg�ndome con el tema, he descubierto que: nombrefichero := 'X:\Origen\File.ext' no lo interpreta correctamente. La f�rmula ser�a: const barra ='\'; begin ... nombrefichero := 'X:' + barra +'Origen'+barra+'File.ext'; ... end Con esto, puedo usar la funci�n FileCopy tanto en windows como en WindowsCE. A lo mejor, es ah� donde todo el mundo choca.

A ver, para hacer esto mismo ya existe una constante predefinida en FreePascal : PathDelim
Os recomiendo hechar un vistazo a el wiki de FreePascal : http://wiki.freepascal.org/Multiplatform_Programming_Guide#Cross-platform_Programming

Saludos

__________ Informaci�n de ESET NOD32 Antivirus, versi�n de la base de firmas de virus 4404 (20090907) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090908/18f50496/attachment.html>

Reply by email

JoshyFun
to Iván Mesa: Gracias por tu respuesta y por el buen camino encontrado. Se pode hacer lo mismos de…

Hello Iv�n,

Tuesday, September 8, 2009, 9:12:58 AM, you wrote:

IM> Gracias por tu respuesta y por el buen camino encontrado. IM> Se pode hacer lo mismos de tantas formas diferentes.... IM> Todo lo que me pasa se ha reducido a un peque�o descuido. IM> Despu�s de estar toda la noche peg�ndome con el tema, he descubierto que: IM> nombrefichero := 'X:\Origen\File.ext' no lo interpreta correctamente. IM> La f�rmula ser�a:
IM> const
IM> barra ='\';
IM> begin
IM> ...
IM> nombrefichero := 'X:' + barra +'Origen'+barra+'File.ext'; IM> ...
IM> end
IM> Con esto, puedo usar la funci�n FileCopy tanto en windows como en WindowsCE.

Pero a�n as� eso no tiene mucho sentido :-? Ya que ambas cosas deber�an ser id�nticas, vamos que:

NombreFichero1:='X:\Origen\File.exe';
NombreFichero2:='X:'+PathDelim+'Origen'+PathDelim+'File.ext';
if NombreFichero1=NombreFichero2 then beep();

Ese c�digo deber�a hacer "beep" en cualquier versi�n de Windows, incluido WinCE :-?

Me has dejado descolocado, la verdad.

Best regards, JoshyFun

Reply by email

Raistware
to JoshyFun

JoshyFun escribi�:

Show quoted text 32 lines
Hello Iv�n, Tuesday, September 8, 2009, 9:12:58 AM, you wrote: IM> Gracias por tu respuesta y por el buen camino encontrado. IM> Se pode hacer lo mismos de tantas formas diferentes.... IM> Todo lo que me pasa se ha reducido a un peque�o descuido. IM> Despu�s de estar toda la noche peg�ndome con el tema, he descubierto que: IM> nombrefichero := 'X:\Origen\File.ext' no lo interpreta correctamente. IM> La f�rmula ser�a: IM> const IM> barra ='\'; IM> begin IM> ... IM> nombrefichero := 'X:' + barra +'Origen'+barra+'File.ext'; IM> ... IM> end IM> Con esto, puedo usar la funci�n FileCopy tanto en windows como en WindowsCE. Pero a�n as� eso no tiene mucho sentido :-? Ya que ambas cosas deber�an ser id�nticas, vamos que: NombreFichero1:='X:\Origen\File.exe'; NombreFichero2:='X:'+PathDelim+'Origen'+PathDelim+'File.ext'; if NombreFichero1=NombreFichero2 then beep(); Ese c�digo deber�a hacer "beep" en cualquier versi�n de Windows, incluido WinCE :-? Me has dejado descolocado, la verdad.

No, no es lo mismo: el caracter '\' es un caracter de escape. Y el caracter '\' , al concatenarlo a la cadena 'X:' + PathDelim + 'Origen' + PathDelim + 'File.ext' se convierte, realmente en 'X:\\Origen\\File.ext'. Si quieres haz pruebas de mostrar por ShowMessage('X:\Origen\File.exe') y ShowMessage('X:'+PathDelim+'Origen'+PathDelim+'File.ext'). No debe de dar el mismo resultado.
Aparte, es bueno siempre tenerlo desarrollado independiente del sistema a tenerlo espec�fico en windows, aunque solo lo vayas a utilizar en un sistema operativo, nunca sabes que va a pasar en un futuro.

__________ Informaci�n de ESET NOD32 Antivirus, versi�n de la base de firmas de virus 4405 (20090908) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com

Reply by email

JoshyFun
to Raistware

Hello Raistware,

Tuesday, September 8, 2009, 1:28:24 PM, you wrote:

R> No, no es lo mismo: el caracter '\' es un caracter de escape. Y el

'\' es un car�cter de escape en 'C', pero no en Pascal.

R> caracter '\' , al concatenarlo a la cadena 'X:' + PathDelim + 'Origen' + R> PathDelim + 'File.ext' se convierte, realmente en 'X:\\Origen\\File.ext'. R> Si quieres haz pruebas de mostrar por

Si, se a lo que te refieres, pero eso es 'C'/'C++'.

R> ShowMessage('X:\Origen\File.exe')
R> y ShowMessage('X:'+PathDelim+'Origen'+PathDelim+'File.ext'). No debe de R> dar el mismo resultado.
R> Aparte, es bueno siempre tenerlo desarrollado independiente del sistema R> a tenerlo espec�fico en windows, aunque solo lo vayas a utilizar en un R> sistema operativo, nunca sabes que va a pasar en un futuro.

Si eso es cierto, pero desde luego 'X:' no ayuda mucho, recuerda que s�lo Windows usa letras de unidades. ;)

Best regards, JoshyFun

Reply by email

Raistware
to JoshyFun

Argh!
Deformaci�n de andar usando cuatro lenguajes a la vez ... de todas formas, es siempre recomendable utilizar constantes para cosas que pueden ser distintas en cada arquitectura o sistema operativo. Y si, obviamente he mantenido la 'X:' porque estaba en el c�digo original, lo suyo ser�a GetConfigDir(false), si no recuerdo mal.

__________ Informaci�n de ESET NOD32 Antivirus, versi�n de la base de firmas de virus 4405 (20090908) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com

Reply by email

Iván Mesa
to JoshyFun: R> No, no es lo mismo: el caracter '\' es un caracter de escape. Y el '\' es un…

El tema es que creo haber probado la f�rmula cd x:\\ y tampoco iba. Pero, cuando haces un showMessage, la cadena si est� bien. Lo que ocurre es que la funci�n CopyFile no lo admite. Yo hubiera jurado que:

  dato1 := 'c:\windows'
  dato2 := 'c:' + PathDelim + 'windows'
  dato1 = dato2

pero no es as�, al menos dentro de la funci�n CopyFile, donde: dato1 dato2
Llevo dos d�as con la problem�tica y he probado de todo, y s�lo dato2 es una cadena valida. Por eso, mi primera pregunta, era si hab�a tocado algo de la configuraci�n que hiciera que la '\' se interpretara de otra manera al compilar.

Reply by email

JoshyFun
to Iván Mesa

Hello Iv�n,

Tuesday, September 8, 2009, 2:15:12 PM, you wrote:

IM> El tema es que creo haber probado la f�rmula cd x:\\ y tampoco iba. IM> Pero, cuando haces un showMessage, la cadena si est� bien. IM> Lo que ocurre es que la funci�n CopyFile no lo admite. IM> Yo hubiera jurado que:
IM> dato1 := 'c:\windows'
IM> dato2 := 'c:' + PathDelim + 'windows'
IM> dato1 = dato2
IM> pero no es as�, al menos dentro de la funci�n CopyFile, donde: IM> dato1 dato2
IM> Llevo dos d�as con la problem�tica y he probado de todo, y IM> s�lo dato2 es una cadena valida.
IM> Por eso, mi primera pregunta, era si hab�a tocado algo de la IM> configuraci�n que hiciera que la '\' se interpretara de otra IM> manera al compilar.

No, pero lo que puedes haber tocado es el uso de "Huge strings", o lo que es lo mismo {$H+} para que use strings largas en vez de shortstrings, ya sabes hasta 255 caracteres.

O quiz� tengas mal la llamada a CopyFile, ya que no tengo la definici�n de la llamada por ning�n lado. En teor�a deber�as poder llamarla as� tambi�n (ojo sin ver la definici�n):

CopyFile(@dato1[1]);

O sea, pasando el "dato1" como un puntero al primer caracter de la cadena de texto.

Mira que arriba tengas:

--------------------
{$mode objfpc}{$H+}
--------------------

o bien {$mode delphi}

No se, es lo que se me ocurre a bote pronto.

Best regards, JoshyFun

Reply by email