Página 1 de 1

Problema al abrir un archivo

NotaPublicado: 2007-01-22 12:53 @578
por davidlo
Hola, tengo un problema al abrir o crear un archivo. Si pongo la ruta absoluta, funciona correctamente:

Código: Seleccionar todo
my $fh = FileHandle->new();

if (!($fh->open("+>/home/david/datos/fichero.dat")))
{
      print("Fallo al crear el fichero\n");
        $fh=undef;
    }else{
        print "DEBUG: fichero abierto con éxito\n";
        $fh->autoflush(1);
    }



Pero si pongo la ruta relativa al directorio local, no funciona:


Código: Seleccionar todo
my $fh = FileHandle->new();

if (!($fh->open("+>./datos/fichero.dat")))
{
      print("Fallo al crear el fichero\n");
        $fh=undef;
    }else{
        print "DEBUG: fichero abierto con éxito\n";
        $fh->autoflush(1);
    }




¿A qué se debe?

NotaPublicado: 2007-01-22 13:09 @589
por explorer
¿Y en qué directorio está el script y en qué directorio lo estás ejecutando?

Sería recomendable que pintaras el valor de $! para saber porqué ha fallado.

NotaPublicado: 2007-01-22 13:18 @596
por davidlo
A ver, mi script está en /home/david , y lo ejecuto desde allí. He visto ahora que si lo ejecuto desde un terminal, escribiendo

perl miprogramita.pl

funciona correctamente, mostrando en la consola:
...
DEBUG: fichero abierto con éxito
...

En cualquiera de los doscasos, con ruta absoluta y con ruta relativa.

Estoy desarrollando con KDevelop y lo que me sucede es que cuando lo ejecuto desde el KDevelop (opción "Construir"->"ejecutar programa principal") solamente funciona si la ruta es absoluta.

NotaPublicado: 2007-01-22 13:33 @606
por explorer
Seguramente porque el Kdevelop lo está ejecutando en un directorio distinto.

El valor de $! te lo dirá. Puedes hacer que además pinte el valor del directorio actual con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Cwd;
print cwd;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Siempre es mejor poner un chdir al principio, si queremos usar direcciones relativas, para asegurarnos de que partimos de un supuesto cierto: la posición del sistema de ficheros raíz del trabajo a realizar. Si no podemos, salimos con un die y listo. Si podemos, tratamos todas las rutas de forma relativa.