Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   No puedo abrir el archivo. (https://www.clubdelphi.com/foros/showthread.php?t=71818)

xanxov 12-01-2011 18:55:42

No puedo abrir el archivo.
 
Tengo una aplicación hecha en Lazarus 0.0.28.2-12 bajo Debian 6.0 64 bits. Funciona perfectamente si la ejecuto desde el GUI, el problema se me presenta cuando lanzo el ejecutable directamente:

Unable to Open File.:confused:


Las líneas que provocan el error son:

1 - Image3.Picture.LoadFromFile('imaxes/imaxe0.png');
2 - nome_ar := 'dicgalego/'+ cad_conv[1] + '.txt';

El puñetero no encuentra ni el archivo imaxe0.png, ni nome_ar.

He pensado en generar un archivo .deb, pero entiendo que no debería ser necesario y tampoco se si funciona.

Un saludo.:)

mightydragonlor 12-01-2011 19:12:31

es problema de permisos("me parece"), ejecútala con permisos de administrador y debería funcionar.

duilioisola 12-01-2011 20:13:12

También puede ser problema del PATH.
Tu le dices que abra imaxes/imaxe0.png, esto es la carpeta imaxes, dentro de la carpeta en la que está el ejecutable.

Si es esto, puedes darle la ruta completa : /home/usuario/imaxes/imaxe0.png
También puedes tratar de ver cual es el directorio en el que estás y verificar primero que exista la carpeta y luego que exista el archivo.

xanxov 12-01-2011 21:09:40

Problema de permisos no puede ser, lo primero que hice fue asegurarme de que el usuario tenía la propiedad de la carpeta y de su contenido y esta todos los permisos, 777.:(
Lo del path, creo que tampoco. Con el archivo en el mismo directorio que el ejecutable tampoco va,

Pero, imaginemos que:

/home/xanxov/midir/imaxes/imaxe0.png

funciona. Sólo en ese ordenador.:rolleyes:

Muchas gracias.Un saludo.:)

arturom 13-01-2011 09:12:33

Cita:

Empezado por xanxov (Mensaje 387350)

Pero, imaginemos que:

/home/xanxov/midir/imaxes/imaxe0.png

funciona. Sólo en ese ordenador.:rolleyes:

Hola,
eso se soluciona usando la función que te devuelve el path completo donde esta situado el ejecutable
Código Delphi [-]
ExtractFilePath( ParamStr( 0 ) )
Si la unes a la cadena que estás usando...
Código Delphi [-]
Image3.Picture.LoadFromFile( ExtractFilePath( ParamStr( 0 ) )+'/imaxes/imaxe0.png' )
Tienes el path completo.

Ñuño Martínez 13-01-2011 17:53:00

Arturom ya ha contestado, pero voy a completar su respuesta.

Los sistemas *NIX no definen el directorio de trabajo como lo hace CP/M y sus derivados (Windows, DOS, ...). Estos sistemas no utilizan como tal el directorio desde el que se llama el programa sino el directorio de usuario ($HOME)*. Te recomiendo que le des un vistazo a Filesystem Hierarchy Standard que explica un poco cómo funciona la jerarquía usada la mayor parte de aquellos sistemas, y así sabrás dónde guardar los ejecutables, las bibliotecas y los datos (cada cosa va en un directorio diferente).

Edito: Si "dentro" de Lazarus funciona diferente, es porque ejecuta el programa redefiniendo el entorno para tenerlo controlado. Si no recuerdo mal, se puede modificar la configuración para indicarle el archivo de trabajo de forma explícita.

*Nota: Alguno me dirá que que cuando se usan comandos o parámetros en la línea de comandos del tipo "gcc fuente.c -o binario" sí se define como directorio de trabajo el directorio desde el que se hace la llamada, pero esto no así. Lo que pasa en estos casos es que el intérprete de comandos, cuando no identificar los parámetros como tales, supone que se trata de rutas relativas y lo que hace es sustituirlo por "gcc $PWD/fuente.c -o $PWD/binario". La prueba es que si no se indica el archivo binario, el compilador creará el archivo "a.out" en $HOME y no en el directorio actual (si miráis el código fuente de gcc veréis que se limita a abrir el archivo "a.out", sin ruta). Y también por esta razón (casi) todos los programas definen sus parámetros como cadenas que empiezan con el caracter "-", para que no los expanda el intérprete de comandos.

Como curiosidad, si haces cosas como "gcc * -o binario", el intérprete de comandos expande "*" y lo sustituye por la ruta completa de los archivos del directorio $PWD, por lo que no es necesario que el programa busque los archivos por sí mismo.

Hay que tener en cuenta que no todos los intérpretes de comandos funcionan igual, y hay algunos que no usan $PWD implícitamente, e incluso que no expanden los comodines "*" ni "?".

xanxov 13-01-2011 21:30:25

Buenas.

Ya lo dijo Nuño, Arturom dio la respuesta y como no podía ser de otra manera, ¡ Funciona !.

Ahora bien, a mi entender, Lazarus guarda sus ficheros, esto se puede configurar en: Entorno->Opciones->Archivos,
En un dir predeterminado los proyectos.
En otro la ruta de compilación de fpc.
dir de fuentes de fpc
dir de contrucción de proyuectos de prueba.
Pero no hay ningún incoveniente en tener directorios con proyectos en $HOME, supongo que será lo habitual, y el editor de codigo sabe donde están, cuando lo llamas carga la última aplicación compilada.
Vale, ya me enrollé. En las versiones anteriores de Debian y Lazarus, al menos las que yo usé, el ejecutable final reconocia el path de la misma forma que el GUI, incluso desde un USB.
Entonces mi dilema es: Debian o Lazarus. ¿ Donde está el bug ?.:(

Un saludo y muchas gracias.:)

arturom 14-01-2011 08:57:58

Hola,
creo que nos estamos liando un poco.
Lazarus, o Delphi que para el caso es el mismo, crea una copia de los formularios y proyecto en la carpeta asignada en los path del entorno, como bien dice xanxov, visible a partir de Entorno->Opciones->Archivos.

Una vez que decides guardar lo que estas haciendo, el IDE te pedirá el path y tu decides donde ponerlo. A partir de ese momento, el IDE encontrará y usará ese path para trabajar y el ejecutable que se encuentra allí funcionará sin problemas.

Otro tema es que el ejecutable NECESITE ENCONTRAR LA RUTA A DETERMINADOS ARCHIVOS. Es en ese momento cuando debes establecer con cierto grado de exactitud donde están esos ficheros; sino, podría ser que el ejecutable no los localice ya que va a buscar en, como decía Nuño, el path establecido para el usuario que lo está ejecutando.

Como verás, en realidad no es un bug, es más una cuestión de diseño.

arturom 14-01-2011 09:02:02

Hola,
creo que nos estamos liando un poco.

Lazarus, o Delphi que para el caso es el mismo, crea una copia de los formularios y proyecto en la carpeta asignada en los path del entorno, como bien dice xanxov, visible a partir de Entorno->Opciones->Archivos.

Una vez que decides guardar lo que estas haciendo, el IDE te pedirá el path y tu decides donde ponerlo. A partir de ese momento, el IDE encontrará y usará ese path para trabajar y el ejecutable que se encuentra allí funcionará sin problemas.

Otro tema es que el ejecutable NECESITE ENCONTRAR LA RUTA A DETERMINADOS ARCHIVOS. Es en ese momento cuando debes establecer con cierto grado de exactitud donde están esos ficheros; sino, podría ser que el ejecutable no los localice ya que va a buscar en, como decía Nuño, el path establecido para el usuario que lo está ejecutando.

Como verás, en realidad no es un bug, es más una cuestión de diseño.


La franja horaria es GMT +2. Ahora son las 11:57:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi